如何在默认浏览器和WebView Android中的所有内部链接中打开外部URL?

时间:2015-06-19 08:31:42

标签: android webview android-browser external-links internal-link

我在我的网页中使用WebView并使用本地文件assetsWebView中显示,但在主HTML页面外部网站(非本地)中显示,我想打开该链接在用户设备上的默认浏览器中 this picture disciple situation

这是我在' onCreate'中的代码。方法

WebView v;

v=(WebView) rootView.findViewById(R.id.webView1);
v.getSettings().setJavaScriptEnabled(true);
WebViewClient vc= new WebViewClient();
v.setWebViewClient(vc);
v.loadUrl("file:///android_asset/home.html");

当我运行应用程序时,内部链接工作正常,但外部链接" www.apple.com"在网络视图中

我搜索了同样的问题并找到了这个解决方案,但仍然在WebView中打开了外部链接

WebView webView = (WebView) rootView.findViewById(R.id.webView1);
webView.setWebViewClient(new MyWebViewClient());
String url = "file:///android_asset/home.html";
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);

和班级

class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.contains("http")){ // Could be cleverer and use a regex
            return super.shouldOverrideUrlLoading(view, url); // Leave webview and use browser
        } else {
            view.loadUrl(url); // Stay within this webview and load url
            return true;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

更改

  if (url.contains("http")) { // Could be cleverer and use a regex
    return super.shouldOverrideUrlLoading(view, url); // Leave webview and use browser
  } else {
    view.loadUrl(url); // Stay within this webview and load url
    return true;
  }

 if (url.contains("http")) { // Could be cleverer and use a regex
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    mContext.startActivity(intent);
    return true;
 }
 return false;

注意:将mContext替换为您的活动背景。