禁用Webview的自动链接

时间:2011-03-29 12:30:40

标签: 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);

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

有没有办法禁用此功能?

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

3 个答案:

答案 0 :(得分: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) {...}
    }); 
    

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

    <meta name="format-detection" content="telephone=no" />
    <meta name="format-detection" content="email=no" />
    
  3. 希望这有帮助。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-2)

您可以在external / webkit / WebKit / android / nav / CacheBuilder.cpp中找到进行真实检测的代码: FindPartialNumber()等等。

您可以根据需要禁用它或更改逻辑。