如何防止电话号码被转换为 Skype 链接?

Posted

技术标签:

【中文标题】如何防止电话号码被转换为 Skype 链接?【英文标题】:How to prevent phone numbers to be converted into Skype links? 【发布时间】:2011-03-03 05:23:06 【问题描述】:

在那些安装了Skype 的 Windows 机器上,它倾向于将所有电话格式的号码转换为 Skype 链接,以便您可以单击它以在 Skype 上拨打电话。

问题是如何防止页面上的某个数字发生这种情况?

【问题讨论】:

AFAIK 它是您浏览器中的一个插件。转到扩展页面并禁用/卸载它。 不能修改设置或浏览器配置。我正在寻找一种方法来中断或绕过 Skype 转换脚本。 @ZeissS 我认为他的意思是通过使用 javascript,从而使页面禁用 Skype 的修改... 好问题。 Skype 处理的链接有点重,可能会导致空间狭窄的格式问题。禁用电话号码是一件好事吗?我想知道.... 【参考方案1】:

尽量不要将数字输出为单个文本。而不是

<span>888-555-1212</span>

试试

<span>888-</span><span>555-1212</span>

它会禁用Skype

【讨论】:

@Yuval:我不是刚给你写信吗? (***.com/users/255562/ashish-gupta) @Yuval:但你看到相似之处了吗? 我用这种方法做了一个快速插件,有些人可能会觉得有用。 owenmelbz.github.com/noSkype 这仅适用于有限数量的数字。 @c_k:我不确定你的意思。我认为这里没有限制 - 例如,为什么不能将每个数字放在单独的跨度中?【参考方案2】:

你也可以不理这个号码,用JS把它去掉。

jQuery(document).ready(function()jQuery('.skype_pnh_container').parent().html('(555) 222 - 3333');
jQuery('.skype_pnh_container').remove()

在普通的 HTML 中很难做到,但是 Skype 不会删除父容器,所以将数字放在带有 ID 的东西中,你可以在上面做一个“getElementById”,将 innerHTML 设置为电话号码。

document.getElementById('phoneNumberContainer').innerHTML='(555) 222 - 4444';

【讨论】:

【参考方案3】:

更新

此答案不再准确 - 请参阅 Daniel Byrne's answer 了解更多信息。


仅使用 CSS,可以通过覆盖 Skype 使用的样式来删除它。尝试将这两行添加到您的样式表中:

span.skype_pnh_container display:none !important;
span.skype_pnh_print_container display:inline !important; 

【讨论】:

您的解决方案对我来说效果很好,感觉是正确的解决方案(而不是将电话号码分成多个跨度标签)。迷上语音对我有用!而且,优秀的名字和头像:) 感谢您的建议。不错的解决方案,但缺点是依赖于 Skype 精确生成的 CSS 元素/类名称。如果他们更改它,该站点将再次中断。 span 解决方案一定是最万无一失的,虽然不是最漂亮的。 将电话号码拆成碎片的问题在于,搜索引擎不会将它们读取为电话号码,而是将它们读取为 3 个单独的小数字,因此如果人们搜索您的公司电话号码,您的页面可能不会显示在结果中 同样,我们不应该混淆您希望客户端阅读和使用的信息——tel: 协议应该允许手机浏览器直接从浏览器发起呼叫提示,而不是费力在电话应用中复制粘贴。 什么冠军!谢谢你。【参考方案4】:

&lt;meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" /&gt;

【讨论】:

这将是一个很好的解决方案,但如果你在 Skype 社区板上查看故障排除的长度,这可能不是一个非常安全的方法forum.skype.com/index.php?showtopic=78380【参考方案5】:

试试这个。它将电话号码中的空格替换为不可见的跨度 + 原始空格字符。所以Skype无法理解它是一个数字,我们心爱的电话号码保持不变:)我不得不使用这种方法,因为我通常让内容管理员随意更改电话号码,因此我不能在javascript中使用硬编码号码。当然你的标记应该看起来像&lt;span class="phone_number"&gt;your number with some spaces inside it&lt;span&gt;

$(document).ready(function() 
    if ($(".phone_number").length>0) 
        $(".phone_number").each(function() 
            $(this).html($(this).html().replace(/\s/g,"<span style=\"display:none\">_</span>&nbsp;"));
        );
    
);

【讨论】:

【参考方案6】:

我在互联网上看到了很多可能的解决方案 javascript 解决方案、元标记、css,也许我发现了一个真正适用于我的网站的 hack,我在一些计算机上进行了测试,并且它可以工作,我认为它会工作,直到 Skype 没有' t 更改他们的代码中的某些内容。

我正在查看我们页面上的 Skype 到底在做什么,它在电话号码周围创建了一些跨度,正如你已经说过的,但它甚至在文档末尾添加了一个标签,就在正文关闭标签之后.

在这里我看到了诀窍!就在该对象之前有一个配置标签:

<span id="skype_highlighting_settings" display="none" autoextractnumbers="1"></span>

这是插件动态添加的!但是这里的解决方案变得很明显,为了最终停止 Skype 干扰您的设计并避免更改电话号码,解决方案是在文档的早期插入以下标签:

<span id="skype_highlighting_settings" display="none" autoextractnumbers="0"></span>

注意 autoextractnumbers="0",这是诀窍。该文档无论如何都不会使用该标签进行验证,因为没有属性“autoextractnumbers”,但我注意到即使评论它也有效:

<!-- <span id="skype_highlighting_settings" display="none" autoextractnumbers="0"></span> -->

就是这样!享受无杂乱插件的网页!而且您的网页仍将正确验证。希望它也适合你!我已经在几台计算机上测试了 3 个不同的浏览器和 2 个不同的 Skype 版本,现在它适用于我,让我知道它是否也适用于你,如果它适用,请分享它:)

【讨论】:

【参考方案7】:

我在数字的第一项添加了一个空格。

我输入的是 (888) 222-3333 而不是 (888) 222-3333

当然:可能看起来很奇怪,但它很有效而且很简单。

【讨论】:

【参考方案8】:

如果您在 ios 上使用 PhoneGap,这可能是 UIWebView 问题(与 Skype 不同)。

如果您不希望在 UIWebView 中生成自动链接,则以下行修复了该问题:

self.viewController.webView.dataDetectorTypes = UIDataDetectorTypeNone;

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 中的 AppDelegate.m 内

【讨论】:

【参考方案9】:

编辑:抱歉,我刚刚发现 IE9 存在此解决方案的问题,因为它不支持软连字符。

这个问题有一个替代解决方案:

您可以在电话号码中使用软连字符 (&amp;shy;) 来解决此问题。例如,给定数字

<span>0664 111 222 3</span>

改成

<span>0664&shy; 111 222 3</span>

开心就好:)

【讨论】:

【参考方案10】:

我在数字前的 span 中添加了一个连字符,然后在 span 样式上设置 display:none,这很有效。

    <span class="anti-skype-hyphen">-<span>01273 200 ***

【讨论】:

【参考方案11】:

Skype 已将随机生成的数字字符串添加到其 span 标签的末尾,因此 Groo 的上述响应不再完全准确。要正确选择页面上的所有 Skype 标签,请使用 CSS3 通配符选择器,如下所示:

span[class^='skype_pnh_container'] display:none !important;
span[class^='skype_pnh_print_container'] display:inline !important;

^= 运算符会导致属性选择器对具有以“skype_pnh_container”和“skype_pnh_print_container”开头的值的类的元素进行处理

【讨论】:

【参考方案12】:

您需要做的就是确保您的 CSS 选择器比 Skype 使用的选择器更具体。在他们使用的当前 Skype 样式表中:

span.skype_pnh_container span.skype_pnh_highlighting_inactive_common span.skype_pnh_text_span ...

您需要向此选择器添加一个额外的类——您自己的网站上下文,即

.myclass span.skype_pnh_container span.skype_pnh_highlighting_inactive_common span.skype_pnh_text_span ...

【讨论】:

【参考方案13】:

官方的解决方案是在你网页的head部分添加如下meta标签。这将阻止 Skype 对电话号码进行任何重新格式化。

&lt;meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" /&gt; 

这是一个供应商特定的标签。见Skype Toolbar meta tag

【讨论】:

【参考方案14】:

我刚刚发现,如果您使用新的 HTML5 tel 协议,它会阻止 Skype 垃圾的出现:

<a href="tel:+18001234567">1 800 123 4567</a>

【讨论】:

与上述所有答案相比,这个对我有用。

以上是关于如何防止电话号码被转换为 Skype 链接?的主要内容,如果未能解决你的问题,请参考以下文章

Skype API 连接被拒绝

如何获取联系人/电话号码的“提供者”(skype/whatsapp/google)

是否可以使用代码在 Google Hangout 中拨打电话?

删除Skype电话号码检测

将电话号码存储为字符串时如何防止输入错误?

删除Skype电话号码检测