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