【问题标题】:open URL in the default browser在默认浏览器中打开 URL
【发布时间】:2014-11-04 14:32:34
【问题描述】:

我有一个 webview,我在其中加载一个 url,当我单击 webview 时,我想在默认浏览器中打开链接。我尝试设置 WebViewClient 和 override shouldOverrideUrlLoading(WebView view, String url) 方法

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.e("BaseFragment", "shouldOverrideUrlLoading  " + url);
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(i);
        return false;
    }

但它不被 webview 调用。还有其他想法吗?

BaseFragment 是一个抽象类,其中我有以下 WebViewClient:

protected WebViewClient mAddWebViewClient = new WebViewClient() {

    @Override
    public void onPageFinished(WebView view, String url) {
        float scale = addTopWebView.getHeight() / 170f;
        addTopWebView.setInitialScale((int) (scale * 100f));
        String js = "javascript:(function(){"
                + "document.getElementsByTagName('div')[0].style.height = 'auto';"
                + "document.getElementsByTagName('div')[0].style.width = 'auto';"
                + "})()";
        view.loadUrl(js);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.e("BaseFragment", "shouldOverrideUrlLoading  " + url);
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(i);
        return true;
    }

};

扩展此 BaseFragment 的其他片段有一些 webviews,在 onViewCreated 方法中我设置了 webviewclient:

    myWebView.getSettings().setJavaScriptEnabled(true);
    addTopWebView = myWebView;
    myWebView.setWebViewClient(mAddWebViewClient);

【问题讨论】:

  • 我在这里没有发现任何问题(您可能希望返回 true 以避免在 web 视图中也加载该页面,但这目前不相关)。您可以发布更多代码吗? (创建 webview,设置 WebViewClient...)

标签: java android webview


【解决方案1】:

我认为你应该为外部浏览器返回 true。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    Log.e("BaseFragment", "shouldOverrideUrlLoading  " + url);
    Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(i);
    return true;
}

如果你想在自定义 web 视图中显示,你应该覆盖并将 return 设置为 false。

【讨论】:

  • 即使我返回 true 它什么也不做......该方法没有被调用
  • 您能否详细说明您的代码是如何工作的?您想从片段中打开 Web 浏览器吗?或者你能发布更多的代码吗?
  • 我添加了更多解释
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 2018-08-21
  • 2014-12-29
  • 2014-12-06
  • 1970-01-01
  • 2011-01-23
  • 2020-05-06
相关资源
最近更新 更多