Як відключити посилання на номер телефону в мобільному Safari?


363

Safari на iPhone автоматично створює посилання для рядків цифр, які відображаються до телефонних номерів. Я пишу веб-сторінку, що містить IP-адресу, і Safari перетворює її на посилання на номер телефону. Чи можна відключити цю поведінку для цілої сторінки чи елемента на сторінці?


Відповіді:


714

Здається, що це правильно зробити, згідно з посиланням на Safari HTML :

<meta name="format-detection" content="telephone=no">

Якщо ви відключили це, але все ще хочете телефонні посилання, ви все одно можете скористатися схемою URI "tel".

Ось відповідна сторінка у Бібліотеці розробників Apple.


1
Це просто не працює. У будь-якому разі не для веб-додатків на iOS 4.3.1.
mhenry1384


2
Просто хотів зазначити, що це також працює для останніх версій, таких як 5.1.1, на якій я зараз перебуваю.
Дейв Штейн

4
Чи можна це застосовувати у кожному конкретному випадку? Наприклад, 1 рядок на сторінці, який я не хочу тлумачити як номер телефону, але зберігаю поведінку для 6 інших на сторінці, яку я хочу автоматично інтерпретувати як номер телефону?
jpostdesign

3
Це прекрасно працює під IOS 12 у 2019 році! 👍🏻
Метт Комарницький

38

Щоб вимкнути розбір зовнішнього вигляду телефону для конкретних елементів, ця CSS, здається, робить свою справу:

.element { pointer-events: none; }
.element > a { text-decoration:none; color:inherit; }

Перше правило відключає клацання, друге дбає про стилізацію.


5
Прекрасне рішення, коли ви хочете обмежити стилізацію / форматування у дуже конкретному місці.
mikevoermans

36

Я використовую столяр нульової ширини &zwj;

Просто поставте це десь у номері телефону, і він працює на мене. Тестується в BrowserStack (та лакмусі для електронних листів).


1
Це працює для мене. Я просто додаю його перед першим номером.
vinboxx

1
Найкраще рішення!
El cero

Я створив HTML-підпис електронної пошти, і це було єдине рішення, яке допомогло запобігти помилковому виявленню (нетелефонного) номера iOS 10 як телефонного номера.
Нік

1
Охайний розчин.
Відмінно

1
Це єдине працездатне рішення, якщо ви просите Mobile Safari завантажити файл XML, який використовує директиву <? Xml-stylesheet> для створення сторінки HTML. Mobile Safari перетворює будь-яке довге число в оригінальному XML у посилання "tel:", навіть якщо джерело не HTML (!).
Марк Райнхолд

33

У мене була така ж проблема. Я знайшов властивість на UIWebView, що дозволяє вимкнути детектори даних.

self.webView.dataDetectorTypes = UIDataDetectorTypeNone;

Нарешті, рішення, яке працювало для мене. Звичайно, це буде працювати лише з людьми, які пишуть власну програму target-c за допомогою UIWebView, а не за допомогою програми Safari. Дякую!!
iandotkelly

29

Додайте це, я думаю, це саме те, що ви шукаєте:

<meta name = "format-detection" content = "telephone=no">

10

Рішення для веб-перегляду!

Для програм PhoneGap-iPhone / PhoneGap-iOS ви можете відключити виявлення телефонних номерів, додавши до делегата програми вашого проекту наступне:

// ...

- (void)webViewDidStartLoad:(UIWebView *)theWebView 
{
    // disable telephone detection, basically <meta name="format-detection" content="telephone=no" />
    theWebView.dataDetectorTypes = UIDataDetectorTypeAll ^ UIDataDetectorTypePhoneNumber;

    return [ super webViewDidStartLoad:theWebView ];
}

// ...

джерело: Вимкнути виявлення телефону в PhoneGap-iOS .


Пішов на реалізацію коду Awoodland, перш ніж я прочитав коментар badger110. Так що я є, в AppDelegate.m, коли мені здається, що я десь бачив це. Я починаю оглядатися, знаходжу прапорець у файлі xib і думаю, що я щойно відкрив щось магічне. Я повертаюся, щоб опублікувати це славне відкриття і знаходити коментар badger110 був там весь час. TL DR: Спочатку прочитайте коментарі, я, рукоятка голови.
Тіна Д.

8

Щоб відключити виявлення телефонного номера на частині сторінки, загортайте порушений текст у прив’язний тег з href = "#". Якщо ви це зробите, мобільні Safari та UIWebView повинні залишити його в спокої.

<a href="#"> 1234567 </a>

1
Це я закінчив, оскільки metaтег не працював. Однак, можливо, це краще зробити, <a href="javascript:;">щоб запобігти побічним ефектам від зміни URL-адреси.
JustJohn

Це працює для мене в HTML-пошті. Я хотів вимкнути лише один номер телефону, не весь. Я щойно додав style = "text-decoration: none;" до тегу з кольором, щоб він відповідав решті тексту, і ви також можете змінити стиль курсору.
Саймон Дарбі

6

Подумайте, я знайшов рішення: покладіть число всередині <label>елемента. Не пробував жодних інших тегів, але <div>залишав його активним на головному екрані, навіть із telephone=noатрибутом.

З попередніх коментарів очевидно, що метатег дійсно працював, але з якихось причин зламався в пізніших версіях iOS, принаймні за деяких умов. Я бігаю 4.0.1.


Привіт, Боб. Якщо ви хочете помістити в прикладах HTML коду, ви повинні обернути код в зворотних лапках, <like this>. (Переповнення стека використовує мову форматування під назвою Markdown.) Я відповідно відредагую вашу відповідь.
Пол Д. Уейт

Це в кінцевому підсумку не вийшло - коли я перезавантажив додаток, вертіння посилань повернулося. Я вдався додати #символ на передній частині телефонного номера: згідно з документом Apple "Довідник схеми URL-адреси Apple": "Зокрема, якщо URL-адреса містить символи * або #, програма Phone не намагається набрати відповідний телефонний номер."
BobFromBris

Ви повинні видалити свою відповідь, оскільки вона не працює. Як ви самі визнаєте у вищенаведеному коментарі.
mhenry1384

@Bob Приємний чистий наконечник. У нас виникли проблеми з HTML в електронному листі. Обгортання етикетки чудово працювало +1, спасибі
geedubb

6

Ви також можете використовувати <a>мітку javascript: void(0)як hrefзначення.

Приклад наступний:
<a href="javascript: void(0)">+44 456 77 89 87</a>


Це допомогло мені, коли потрібно, все-таки використовувати стиль iOS за замовчуванням, але ігнорувати конкретні елементи.
більшийКринг

4

У мене була така ж проблема, але у веб-додатку iPad.

На жаль, ні ...

 <meta name = "format-detection" content = "telephone=no">

ні ...

&#48; = 0
&#57; = 9

... працював.

Але ось три негарних хаки:

  • замінивши число "0" літерою "O"
  • заміна числа "1" на букву "l"
  • вставити безглуздий проміжок: наприклад, 555.5<span>5</span>5.5555

Залежно від шрифту, який ви використовуєте, перші два ледь помітні. Останній, очевидно, включає зайвий код, але невидимий для користувача.

Kludgy хаки точно, і, ймовірно, не життєздатні, якщо ви динамічно генеруєте код з даних або якщо ви не можете забруднити свої дані таким чином.

Але, достатньо в дрібці.


2
"Залежно від шрифту, який ви використовуєте, перші два ледь помітні", якщо користувач не встановив iOS для читання вмісту . Тоді це було б досить помітно.
Пол Д. Уейт

1
Для доступності (наприклад, зчитувач тексту, згаданий вище) або якщо користувач копіює / вставляє в додаток телефону, це просто порушує речі. Також загалом, якщо павук з Yelp чи Google або подібного індексує бізнес і витягує неправильний номер телефону, це не добре.
Йона

4

У мене був ABN (австралійський діловий номер), який iPad Safari наполягав на перетворенні на номер телефону. Жодна з пропозицій не допомогла. Моє рішення полягало в тому, щоб помістити теги img між числами.

ABN 98<img class="PreventSafariFromTurningIntoLink" /> 009<img /> 675<img /> 709

Клас існує лише для документування того, для чого призначені теги img.

Працює на iPad 1 (4.3.1) та iPad 2 (4.3.3).


3
На жаль, в Internet Explorer я отримую ці розбиті піктограми зображень. Додавання width="0" height="0"допомагає, але все одно відображається один піксель.
Geert

1
Вам не потрібні зображення, просто покладіть будь-який HTML всередину номера: <p> Не телефон: 112 <span> 34 </span> 56 </p>
Радек Печ

@Geert, встановити line-heightі font-sizeдо нуля.
HelpNeeder

4

Мій досвід такий же, як згадували деякі інші. Метатег ...

<meta name = "format-detection" content = "telephone=no">

... працює, коли веб-сайт працює в мобільному Safari (тобто, з хромом), але припиняє роботу при запуску як веб-перегляд (тобто зберігається на головному екрані та працює без хрому).

Моє менш ніж ідеальне рішення - вставити значення у поля введення ...

<input type="text" readonly="readonly" style="border:none;" value="3105551212">

Це менш ніж ідеально, оскільки, незважаючи на встановлення жодної межі, iOS надає багатопопіксельну сіру смугу над полем. Але, це краще, ніж бачити номер як посилання.


3

Я сам це перевірив і виявив, що він працює, хоча це, звичайно, не елегантне рішення. Якщо вставити порожній проміжок в номер телефону, запобігання детекторам даних не перетворить його на посилання.

(604) 555<span></span> -4321

1
Це також виправлення, яке я в кінцевому підсумку використав, і він працює дуже добре і досить простий.
Холгер

2
Це не хороший відповідь, оскільки ви генеруєте навмисний поганий HTML.
Стефанфрідріх

2

<meta name = "format-detection" content = "telephone=no"> не працює для електронних листів: якщо HTML, який ви готуєте, призначений для електронної пошти, метатаг буде проігноровано.

Якщо ви націлені на електронні листи, ось ще одне неприємне рішення, яке працює для вас:

Приклад деяких HTML, які ви хочете уникнути зв’язування або автоматичного форматування:

will cease operations <span class='ios-avoid-format'>on June 1,
2012</span><span></span>.

І CSS, який зробить магію:

@media only screen and (device-width: 768px) and (orientation:portrait){
span.ios-date{display:none;}
span.ios-date + span:after{content:"on June 1, 2012";}
}

Недолік: вам може знадобитися медіа-запит для кожної комбінації ipad / iphone портрет / пейзаж



1

Та ж проблема в додатку Sencha Touch вирішена метатегом ( <meta name="format-detection" content="telephone=no">) в index.html програми.


1

Трюк, який я використовую для більшої, ніж просто мобільної програми Safari, - це використання кодів HTML для відключення та невелика націнка на номер телефону. Це ускладнює браузер "ідентифікувати" номер телефону, тобто

Phone: 1-8&#48;&#48;<span>-</span>62&#48;<span>-</span>38&#48;3

1

У мене теж є така проблема: Safari та інші мобільні браузери перетворюють ідентифікаційні документи з ПДВ у телефонні номери. Тому я хочу, щоб чистий метод уникнув його на одному елементі, а не на всій сторінці (або на сайті).
Я ділюсь можливим рішенням, яке я знайшов, воно є неоптимальним, але все-таки воно досить життєздатне: я вказую, що всередині номера я не хочу стати tel:посиланням, &#8288;HTML-сутність, яка є невидимим символом Word-Joiner . Я спробував залишитися більш семантичним (ну, принаймні, свого роду), поставивши цю позначку в якомусь значущому місці, наприклад, для ПДВ-ідентифікатора я вирішив поставити його між різними групами цифр відповідно до його формату, так що для італійського ПДВ я писав: 0613605&#8288;048&#8288;8який відображається в 0613605⁠048⁠8 і не перетворюється на номер телефону.


1

Інший варіант - замінити дефіси у своєму телефонному номері символом (U + 2011 "Unicode Нерозривний дефіс")


1

Я на деякий час був справді розгублений, але нарешті зрозумів це. Ми оновлювали наш сайт, деякі номери переходили на посилання, а деякі - не. Виявляється, номери не будуть перетворені на посилання, якщо вони знаходяться в <fieldset>. Очевидно, що для більшості обставин не є правильним рішенням, але в деяких воно буде правильним.


0

Ця відповідь нагадує все станом на 6-13-2012:

<a href="#" style="color: #666666; 
                   text-decoration: none;
                   pointer-events: none;">
  Boca Raton, FL 33487
</a>

Змініть колір у відповідності з вашим текстом, оформлення тексту видаляє підкреслення, події вказівника зупиняють його перегляд як посилання в браузері (вказівник не змінюється на руку)

Це ідеально підходить для HTML-повідомлень на ios та браузері.


1
Мені здається, що це явно встановлює колір. Іншими словами, він буде сірим, незважаючи ні на що.
бензадо

"Події вказівника не дозволяють йому переглядатись як посилання у браузері" - у браузері, який підтримує pointer-events, звичайно. Якщо користувач переглядає ваші HTML електронні листи в IE 10, однак, нічого поганого .
Пол Д. Уейт

Питання стосується придушення виявлення телефонних номерів, а не поштових адрес.
jww

0

Чому ви хочете видалити посилання, це робить його дуже зручним для користування.

Якщо ви просто хочете видалити автоматичне редагування, але продовжуйте працювати посилання, просто додайте це до свого CSS ...

a[href^=tel] {
 color: inherit;
 text-decoration:inherit;
}

5
ну, я не можу сказати про оригінальний плакат, але в моєму випадку Safari здогадується про телефони, які насправді не є телефонними номерами, вони є фінансовими даними
Irae Carvalho,

1
Питання стосується виявлення зв'язку на телефонних номерах, а не їх редагування.
jww

В деяких випадках у вас може бути номер телефону на веб-сайті, де вам потрібно виконати якусь іншу операцію, ніж здійснення телефонного дзвінка, як, наприклад, підключення опції для його редагування, або можливість натиснути і перетягнути його кудись інше.
Носаїмікі

він не хоче, щоб ip-адреси були пов’язані як телефонні номери
jahller

0

Розбийте число на окремі блоки тексту

301 <div style="display:inline-block">441</div> 3909

1
Ви можете сказати, що це рішення.
Даан

-16

Іншим рішенням буде використання зображення номера IP


4
Я думаю, це не така ідея бога. Видаліть свою відповідь. Тому що ви не можете скопіювати / вставити текст зображень, його нелегкий сервіс (якщо ви зміните вміст або стиль шрифту), а також його без бар'єрів.
Стефанфрідріх

рішення може бути гіршим, ніж проблема, як сказав @stephanfriedrich, це не стане корисним чи корисним
kaosmos

Зовсім не корисно.
Лука Антонеллі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.