4

我正在使用 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

你有什么想法?

4

1 回答 1

2

特定电话号码链接没有被禁用的原因是它不是检测到的电话号码,它只是一个常规的旧<a href=foo>链接,恰好具有其href属性的电话链接。设置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]);
    }
}
于 2013-03-26T21:08:51.580 回答