阻止UIWebView显示用于tel链接的UIPopoverController

时间:2013-03-26 19:45:40

标签: ios objective-c ipad

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

当用户点按电子邮件,地址和电话号码时,我的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上运行良好

你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

特定电话号码链接未被禁用的原因是它不是检测到的电话号码,它只是一个普通的旧<a href=foo>链接,恰好有一个电话链接其href属性。设置dataDetectorTypes就像你正在做的那样是禁用电话号码检测的正确方法。因此,如果您的电话号码只是出现在某个网页文字中,并且您希望阻止其成为链接,请继续使用webView.dataDetectorTypes = UIDataDetectorTypeNone;

如果要禁用所有看起来像电话号码的链接,则需要在页面加载完成后执行JavaScript。在您的UIWebView的委托webViewDidFinishLoad方法中使用[webView stringByEvaluatingJavaScriptFromString:]并传入JavaScript以替换有问题的链接。这是一个示例JavaScript,它将用显示电话号码的文本元素替换所有电话风格链接。您可能想要稍微不同的东西,或者您可能只想完全从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]);
    }
}