如何禁用Mobile Safari中的电话号码链接?


Answers:


714

根据Safari HTML参考,这似乎是正确的做法:

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

如果禁用此功能,但仍需要电话链接,则仍可以使用“ tel” URI方案。

这是Apple开发人员库中的相关页面


1
这根本行不通。无论如何,不​​适用于iOS 4.3.1上的Web应用程序。
mhenry1384


2
只是要注意,这也适用于最新版本,例如我现在使用的5.1.1。
戴夫·斯坦

4
可以逐案适用吗?例如,我不想将页面上的1个数字字符串解释为电话号码,但是我希望将页面上的6个其他字符串保留为我希望自动解释为电话号码的行为吗?
jpostdesign 2015年

3
这在2019年的IOS 12下非常完美!👍🏻
马特Komarnicki

38

要禁用特定元素的电话解析外观,此CSS似乎可以解决问题:

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

第一个规则禁用点击,第二个规则负责样式。


5
您想要在非常特定的位置限制样式/格式的绝佳解决方案。
mikevoermans

36

我使用零宽度的细木工 &zwj;

只需将其放在电话号码中,即可使用。在BrowserStack(和Litmus用于电子邮件)中进行了测试。


1
这对我有用。我只是在第一个数字之前添加它。
vinboxx

1
最好的解决方案!
El cero

我创建了HTML电子邮件签名,这是唯一可以防止iOS 10邮件错误地将(非电话)号码检测为电话号码的解决方案。
尼克

1
整洁的解决方案。/的iOS 9.制作iPhone 6S(+)精
安Tohvri

1
如果您要求Mobile Safari加载使用<?xml-stylesheet>指令生成HTML页面的XML文件,则这是唯一可行的解​​决方案。即使源不是HTML(!),Mobile Safari也会将原始XML中的任何长数字都转换为“ tel:”链接。
Mark Reinhold

33

我遇到了同样的问题。我在UIWebView上找到了一个属性,该属性使您可以关闭数据检测器。

self.webView.dataDetectorTypes = UIDataDetectorTypeNone;

最后,一个对我有用的解决方案。当然,这仅适用于使用UIWebView而非Safari应用程序编写自己的Objective-C应用程序的人们。谢谢!!
2011年

29

加上这个,我想这就是您要寻找的:

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

10

Webview解决方案!

对于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中禁用电话检测


在阅读Bader110评论之前,请去执行Awoodland的代码。因此,在AppDelegate.m中,当我想到某个地方时,就出现了。我开始四处张望,找到xib文件中的复选框,我想我刚刚发现了一些神奇的东西。我回过头来发布这个光荣的发现,并发现abadr110的评论一直在那里。TL DR:请先阅读评论,然后指关节。
蒂娜D.

8

要在部分页面上禁用电话号码检测,请使用href =“#”将受影响的文本包装在锚标记中。如果这样做,移动Safari和UIWebView应该不要理会它。

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

1
这是我最后做的,因为该meta标记无效。但是,最好这样做是<a href="javascript:;">为了防止URL更改带来副作用。
JustJohn 2011年

这适用于HTML电子邮件中的我。我只想禁用一个电话号码,而不是全部。我刚刚添加了样式=“ text-decoration:none;” 标签的颜色与文本的其余部分匹配,您也可以更改光标样式。
西蒙·达比

6

认为我已经找到了解决方案:将数字放在<label>元素中。尚未尝试任何其他标签,但<div>即使在使用telephone=no属性的情况下,也使其在主屏幕上处于活动状态。

从早期的评论看,显然meta标签确实起作用了,但是由于某些原因,至少在某些情况下,在更高版本的iOS中已损坏。我正在运行4.0.1。


嗨,鲍勃。如果要放入HTML代码示例,则必须将代码包装在反引号中<like this>。(Stack Overflow使用一种称为Markdown的格式语言。)我将相应地编辑您的答案。
Paul D. Waite,2010年

最终没有奏效-当我重新加载该应用程序时,链接隐藏功能又恢复了。我已采取措施#在电话号码的前面添加一个字符:根据Apple文档“ Apple URL方案参考”:“具体来说,如果URL包含*或#字符,则Phone应用程序不会尝试拨打相应的字符。电话号码。”
BobFromBris

您应删除答案,因为它不起作用。正如您自己在上述评论中所承认的那样。
mhenry1384

@鲍勃尼斯干净的提示。电子邮件中的HTML存在问题。封装标签效果不错,+ 1,谢谢
geedubb,

6

您还可以将<a>标签与javascript: void(0)用作href值。

示例如下:
<a href="javascript: void(0)">+44 456 77 89 87</a>


这在需要仍使用默认iOS样式和操作但忽略特定元素的情况下对我有所帮助。
国王

4

我遇到了同样的问题,但是在iPad Web应用程序上。

不幸的是,两个...

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

也不...

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

...有效。

但是,这是三个丑陋的骇客:

  • 用字母“ O”替换数字“ 0”
  • 用字母“ l”代替数字“ 1”
  • 插入无意义的跨度:例如, 555.5<span>5</span>5.5555

根据使用的字体,前两个几乎不明显。后者显然涉及多余的代码,但对用户不可见。

Kludgy可以肯定地进行黑客攻击,如果您是根据数据动态生成代码,或者无法以这种方式污染数据,则可能不可行。

但是,足够紧要关头。


2
“取决于所使用的字体,前两个几乎不明显”,除非用户已将iOS设置为向他们读取内容。那将是非常明显的。
Paul D. Waite 2014年

1
对于可访问性(例如上述文本阅读器),或者如果用户将其复制/粘贴到电话应用程序中,则只会造成问题。同样,通常,如果Yelp或Google等公司的蜘蛛正在索引一家公司,并且拉错了电话号码,那是不好的。
约拿(Jonah)

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"帮助,但仍显示单个像素。
盖尔特,

1
您不需要图像,只需在数字内放任何HTML:<p>不打电话:112 <span> 34 </ span> 56 </ p>
Radek Pech 2015年

@Geert,组line-heightfont-size为零。
HelpNeeder

4

我的经验与其他人的经验相同。元标记...

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

...在网站在Mobile Safari中运行(即使用chrome)时有效,但是在以webapp身份运行时(即保存到主屏幕且未使用chrome运行)时停止工作。

我不太理想的解决方案是将值插入输入字段...

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

这是不理想的,因为尽管没有设置边框,iOS仍会在字段上方渲染多像素灰色条。但是,总比将数字视为链接要好。


3

我自己对此进行了测试,发现它可以工作,尽管它当然不是一个很好的解决方案。在电话号码中插入空跨度将防止数据检测器将其转换为链接。

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

1
这也是我最终使用的修复程序,它可以很好地工作并且非常简单。
Holger 2014年

2
这不是一个好答案,因为您会生成故意的错误HTML。
stephanfriedrich'1

2

<meta name = "format-detection" content = "telephone=no"> 不适用于电子邮件:如果您准备的HTML用于电子邮件,则元标记将被忽略。

如果您的目标是电子邮件,那么以下是适用于Ya'll的又一个丑陋但可行的解决方案:

您想要避免链接或自动格式化的某些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

我使用的一种技巧不仅适用于Mobile Safari,还可以使用HTML转义码和电话号码中的一些标记。这使浏览器更难以“识别”电话号码,即

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

1

我也有这个问题:Safari和其他移动浏览器将VAT ID转换为电话号码。因此,我希望使用一种干净的方法来避免在单个元素上而不是整个页面(或网站)上使用它。
我正在分享一个发现的可能解决方案,它不是最优的,但仍然是可行的:我将不想成为tel:链接的数字放在&#8288;HTML实体中,它是Word-Joiner不可见字符。我试图通过将这个字符放在某个有意义的位置上来保持语义上(至少是某种意义上),例如,对于增值税ID,我选择了根据其格式放在不同的数字组之间,因此对于意大利增值税写道:0613605&#8288;048&#8288;8会在0613605⁠048⁠8中呈现,并且不会转换为电话号码。


1

另一种选择是将电话号码中的连字符替换为字符(U + 2011'Unicode Non-Breaking Hyphen')


1

我对此感到很困惑,但最终想出了办法。我们对网站进行了更新,有一些数字转换为链接,而有些则没有。事实证明,如果数字位于<fieldset>中,则不会将它们转换为链接。显然,对于大多数情况,这不是正确的解决方案,但在某些情况下,它将是正确的解决方案。


0

截至2012年6月13日,这个答案胜过一切:

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

将颜色更改为与文本匹配的颜色,文本修饰去除下划线,指针事件阻止其像浏览器中的链接一样被查看(指针不会变为手形)

这非常适合ios和浏览器上的HTML电子邮件。


1
在我看来像这样显式设置颜色。换句话说,无论如何,它都是灰色的。
benzado 2012年

“指针事件使它无法像浏览器中的链接一样被查看” –当然,在支持的浏览器中pointer-events。但是,如果用户正在IE 10中查看您的HTML电子邮件,那就不好了
Paul D. Waite 2014年

问题是关于禁止检测电话号码,而不是邮寄地址。
jww

0

您为什么要删除链接,所以选择它对用户非常友好。

如果您只是想删除自动编辑,但要保持链接正常运行,只需将其添加到CSS中即可。

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

5
好吧,我不能说说原始海报,但就我而言,Safari猜测的手机实际上不是电话号码,而是财务数据
Irae Carvalho

1
问题是关于电话号码的链接检测,而不是编辑它们。
jww

在某些情况下,您可能会在网站上拥有一个电话号码,除了拨打电话外,您还需要执行一些其他操作,例如拉出一个选项来对其进行编辑,或者能够将其单击并拖动到其他地方。
Nosajimiki

他不想将IP地址链接为电话号码
jahller

0

将数字分解为单独的文本块

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

1
您可能要提到这是一种解决方法。
大安

-16

另一种解决方案是使用IP地址的图片


4
我认为,这不是一个上帝的主意。请删除您的答案。因为,您不能复制/粘贴图像文本,它不容易维护(如果更改内容或字体样式),并且也不是无障碍的。
stephanfriedrich,2015年

解决方案可能比问题更糟糕,如@stephanfriedrich所说,这将不会有用或不可用
kaosmos

完全没有用。
卡·安东内利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.