【问题标题】:Prevent UIWebView from showing UIPopoverController for tel links防止 UIWebView 为电话链接显示 UIPopoverController
【发布时间】:2013-03-26 19:45:40
【问题描述】:

我正在使用 UIWebView 开发 iPad 应用程序(部署目标 iOS 5.0+)。

当用户点击电子邮件、地址和电话号码时,我的 UIWebView 应该什么都不做

我对电话号码有疑问。如果 html 页面包含这样的链接:<a href="tel:555-555-5555">555-555-5555</a> 当用户点击此链接时 UIPopoverController 出现(添加到联系人,复制)。

我已经试过了:

  • 为 UIWebView 关闭 xib 文件中的检测
  • webView.dataDetectorTypes = UIDataDetectorTypeNone;
  • 调用JS-document.documentElement.style.webkitTouchCallout = "none";

UIWebView 委托方法 shouldStartLoadWithRequest 不适用于 iPad 上的电话号码,但在 iPhone 上可以正常工作

你有什么想法吗?

【问题讨论】:

  • 什么意思?请澄清
  • “shouldStartLoadWithRequest 不适用于 iPad 上的电话号码”是什么意思?它没有被调用吗?
  • 是的 shouldStartLoadWithRequest 没有被调用
  • 将其标记为重复是错误的。该操作明确表示实施shouldStartLoadWithRequest(这是对假定重复的答案)并没有解决他的问题。同时,当前接受的答案提供了一个完全不同(且正确)的解决方案。

标签: ios objective-c ipad


【解决方案1】:

特定电话号码链接没有被禁用的原因是它不是一个检测到的电话号码,它只是一个普通的旧<a href=foo> 链接,恰好有一个电话链接用于它的@ 987654322@ 属性。像您一样设置dataDetectorTypes 是禁用电话号码检测的正确方法。因此,如果您的电话号码只是出现在某处的网页文本中,并且您想防止这些电话号码成为链接,请继续使用webView.dataDetectorTypes = UIDataDetectorTypeNone;

如果您想禁用所有看起来像电话号码的链接,您需要在页面完成加载后执行 JavaScript。在您的 UIWebView 代理的 webViewDidFinishLoad 方法中,使用 [webView stringByEvaluatingJavaScriptFromString:] 并传入 JavaScript 以替换有问题的链接。这是一个示例 JavaScript,它将用显示电话号码的文本元素替换所有 tel 样式链接。您可能想要一些稍微不同的东西,或者您可能只想从 DOM 中完全删除链接。

var links = document.getElementsByTagName('a');
for (var j = 0; j < links.length; j++) {
    var href=links[j].getAttribute('href');
    var prefix = href.substring(0,4);
    if (prefix == "tel:") {
        var parentNode = links[j].parentNode;
        var replacementNode = document.createTextNode(href.substring(prefix.length, href.length));
        parentNode.replaceChild(replacementNode, links[j]);
    }
}

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 2010-12-27
    • 2011-12-27
    • 2011-05-19
    • 2012-07-10
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多