禁用Webview的自动链接

Inn*_*ova 6 android webview linkify

我有一个我正在创建的webview.它似乎自动将数字链接到tel:urls.我没有看到删除此功能的方法(至少没有类似于在textview上启用它的方式).

代码非常简单:

// populate the web view
WebView webView = (WebView) findViewById(R.id.app_info_webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY);

webView.setBackgroundColor(0);
String url = APP_INFO_BODY_HTML + "?versionName=" + versionName;

webView.loadUrl(url);
Run Code Online (Sandbox Code Playgroud)

我在页面底部有版权声明,android正在将2011改为打开拨号器的可点击链接.此外,应用程序版本1.0.0在拨号器中打开.

有没有办法禁用此功能?

更新:我刚刚发现这似乎依赖于设备......发生在Droid X上,但不是三星Captivate,而不是Nexus S,而不是模拟器.

小智 7

有一种方法可以做到这一点 - 相当丑陋,两层,但仍然是一种解决方法.

你应该

  1. 修改webview将如何处理可自动链接的项目
  2. 明确告诉加载的页面不要应用样式和触觉反馈.

    mWebView.setWebViewClient( new WebViewClient() {
    
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, final String url) {
        Uri uri = Uri.parse(url);
    
        //TODO analyse the uri here 
        //and exclude phone and email from triggering any action
    
        return false;
    }
    
    public void onReceivedError(WebView view, int errorCode, 
                                            String description, String failingUrl) {}
    
    public void onPageFinished (WebView view, String url) {...}
    
    public void onPageStarted(WebView view, String url, Bitmap favicon) {...}
    
    public void onLoadResource(WebView view, String url) {...}
    }); 
    
    Run Code Online (Sandbox Code Playgroud)

    在html中,在标记内指定以下元标记:

    <meta name="format-detection" content="telephone=no" />
    <meta name="format-detection" content="email=no" />
    
    Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我认为还有第三种格式检测类型:&lt;meta name="format-detection" content="address=no" /&gt;。电话号码停止自动 tel: 链接,电子邮件停止自动 mailto: 链接,地址停止 geo: 链接。我找不到有关电子邮件或地址的任何官方文档。http://developer.apple.com/library/safari/#documentation/appleapplications/reference/SafariHTMLRef/Articles/MetaTags.html 仅提到电话。 (2认同)

Suk*_*mar 0

我很惊讶地看到它在从您自己的 WebView 中选择号码时启动 Dialer。

除非您覆盖 WebViewClient::shouldOverrideUrlLoading() 并检测到 url 方案具有“tel”并启动 Dialer 活动,否则它永远不会从您的 WebView 启动 Dialer。您确定没有在 shouldOverrideUrlLoading() 中处理 tel: 方案吗?