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あなたがしているように設定することは、電話番号の検出を無効にする正しい方法です。したがって、Webページのテキストのどこかに電話番号が表示されているだけで、それらがリンクにならないようにしたい場合は、を使用し続けてwebView.dataDetectorTypes = UIDataDetectorTypeNone;ください。

電話番号のように見えるすべてのリンクを無効にする場合は、ページの読み込みが完了した後にJavaScriptを実行する必要があります。UIWebViewのデリゲートのwebViewDidFinishLoadメソッド[webView stringByEvaluatingJavaScriptFromString:]で、JavaScriptを使用して渡し、問題のあるリンクを置き換えます。これは、すべてのtelスタイルのリンクを代わりに電話番号を示すテキスト要素に置き換える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]);
    }
}
于 2013-03-26T21:08:51.580 に答える