ios – 防止UIWebView显示用于tel链接的UIPopoverController

我正在使用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上运行正常.

你有什么想法?

最佳答案 特定电话号码链接未被禁用的原因是它不是检测到的电话号码,它只是一个普通的电话号码< 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]);
    }
}
点赞