ios - 防止 UIWebView 为 tel 链接显示 UIPopoverController

标签 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 委托(delegate)方法 shouldStartLoadWithRequest不适用于 iPad 上的电话号码,但适用于 iPhone

你有什么想法吗?

最佳答案

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

如果您想禁用所有看起来像电话号码的链接,您需要在页面加载完成后执行 JavaScript。在您的 UIWebView 委托(delegate)的 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]);
    }
}

关于ios - 防止 UIWebView 为 tel 链接显示 UIPopoverController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646062/

相关文章:

ios - 在一个操作中禁用所有 CALayer 默认操作

ios - 添加 pod 后 Facebook Swift (facebook-sdk-swift) 错误

iOS:读取PDF文件的内容

ios - 如何在 Xcode 6.3 中使用 AutoLayout 创建 ScrollView

ios - 如何在ios应用程序中将pdf页面转换为文本文件

javascript - 两个 amCharts 图表未在 iPad 上使用 jQueryMobile 框架显示在同一页面上

ios - IBOutlets 的约束冲突

objective-c - 使用 NSURLConnection sendAsynchronousRequest

objective-c - NSApplication初始化失败: Creating more than one Application

ios - 如何根据数据量将数据存储在 iPhone/iPad 上?