我正在使用UIWebView(部署目标iOS 5.0 +)开发iPad应用程序。
当用户点按电子邮件,地址和电话号码时,我的UIWebView应该无。
我的电话号码有问题。如果html页面包含如下链接:<a href="tel:555-555-5555">555-555-5555</a>
当用户点击此链接时,会出现UIPopoverController(添加到联系人,复制)。
我接下来试过了:
webView.dataDetectorTypes = UIDataDetectorTypeNone;
document.documentElement.style.webkitTouchCallout = "none";
UIWebView委托方法shouldStartLoadWithRequest
不适用于iPad上的电话号码,但在iPhone上运行良好。
你有什么想法吗?
答案 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]);
}
}