代码之家  ›  专栏  ›  技术社区  ›  Ain Tohvri

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

  •  42
  • Ain Tohvri  · 技术社区  · 16 年前

    在那些装有 Skype 安装后,它会将所有电话格式的号码转换为Skype链接,以便您可以单击它在Skype上拨打电话。

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

    14 回复  |  直到 11 年前
        1
  •  45
  •   John Saunders    14 年前

    尝试不要将数字输出为单个文本。而不是

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

    尝试

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

    它将禁用Skype

        2
  •  39
  •   Community Mohan Dere    9 年前

    更新

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


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

    span.skype_pnh_container {display:none !important;}
    span.skype_pnh_print_container {display:inline !important;} 
    
        3
  •  14
  •   John Saunders    12 年前

    Skype已经开始在他们的SPAN标签的末尾添加一个随机生成的数字字符串,因此groo的上述响应不再完全准确。要正确选择页面上的所有Skype标记,请使用css3通配符选择器,如:

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

    这个 ^= 运算符使属性选择器指向mach元素,这些元素的类包含以“skype-pnh-container”和“skype-pnh-print-container”开头的值

        4
  •  13
  •   dobs    15 年前

    <meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" />

        5
  •  13
  •   Community Mohan Dere    9 年前

    官方的解决方案是在网页的头部添加以下元标记。这将阻止Skype对电话号码进行任何重新格式化。

    <meta name="SKYPE_TOOLBAR" content="SKYPE_TOOLBAR_PARSER_COMPATIBLE" /> 

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

        6
  •  5
  •   xon1c    14 年前

    编辑:对不起,我刚发现IE9有这个解决方案的问题,因为它不支持软连字符。

    对于这个问题,还有另一种解决方案:

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

    <span>0664 111 222 3</span>
    

    改为

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

    并快乐起来:

        7
  •  4
  •   Yoni    11 年前

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

    <a href="tel:+18001234567">1 800 123 4567</a>
    
        8
  •  2
  •   lukart    14 年前

    我在InterWeb上看到了很多可能的解决方案,比如JavaScript解决方案、元标签、CSS,也许我发现了一个黑客在我的网站上工作,我在一些计算机上进行了测试,它可以工作,我认为它可以工作,直到Skype不改变他们的代码。

    我在看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版本,目前它对我有效,请告诉我它是否也对你有效,如果它有效,请分享它:)

        9
  •  1
  •   John Saunders    14 年前

    我在数字的第一个术语中加了一个空格。

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

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

        10
  •  1
  •   Stu    13 年前

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

        <span class="anti-skype-hyphen">-<span>01273 200 ***
    
        11
  •  1
  •   Timidfriendly    13 年前

    你需要做的就是确保你的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 {...}
    
        12
  •  1
  •   John Saunders    11 年前

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

    $(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;"));
            });
        }
    });
    
        13
  •  0
  •   Aaron Butacov    16 年前

    您也可以将该编号单独保留,并使用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';

        14
  •  0
  •   John Saunders    12 年前

    如果您在iOS上使用PhoneGap,这可能是一个uiWebView问题(与Skype不同)。

    如果不希望在uiwebview中生成自动链接,则以下行将解决此问题:

    self.viewController.webView.dataDetectorTypes = UIDataDetectorTypeNone;
    

    内部AppDelegate.m in -(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions