android - WebView - 在外部浏览器中加载链接

标签 android webview

我正在应用程序的 WebView 中加载本地存储的 HTML 文件的内容。该文件中还包含链接,单击该链接时,会在同一 WebView 中加载 URL。我想在外部浏览器中加载这些链接。我查看了 onPageStartedshouldOverrideUrlLoading,但它们似乎不起作用。我尝试过以下方法:

    webAbout = (WebView) findViewById(R.id.wvAbout);
    webAbout.loadUrl(Const.defURL);

    webAbout.setWebViewClient(new WebViewClient() {  
          @Override  
          public void onPageStarted(WebView view, String url, Bitmap favicon){  
            if (!url.startsWith(Const.defURL)) { 
              view.stopLoading();  
              // DO SOMETHING  
            }else{
                view.loadUrl(Const.defURL);
            }
          }  
        });

我也尝试过:

    webAbout = (WebView) findViewById(R.id.wvAbout);
    webAbout.loadUrl(Const.defURL);

     webAbout.setWebViewClient(new WebViewClient(){
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            if (url != null && (url.startsWith(Const.defURL))){

                webAbout.loadUrl(Const.defURL);
                return true;
                } 

          else  {

                view.getContext().startActivity(
                new Intent(Intent.ACTION_VIEW, Uri.parse(url)));  
                return false;
          }
        }
    });

但在这两种情况下,WebView 都不会加载任何内容。知道我哪里出错了吗?

最佳答案

当您希望在 WebView 中加载 URL 时,从 shouldOverrideUrlLoading 返回 false,如果您不想加载 WebView,则返回 true URL(这意味着您已经自己以某种方式处理了它)。

请记住:

  • 您需要在调用 loadUrl 之前设置 WebViewClient
  • 对于传递给 loadUrl 的 URL,
  • shouldOverrideUrlLoading 不会被调用。

您的代码应该可以进行一些修改:

 webAbout.setWebViewClient(new WebViewClient(){
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null && (url.startsWith(Const.defURL))){
            return false;
        } else  {
            view.getContext().startActivity(
            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));  
            return true;
      }
    }
});
// I'm assuming Const.defURL doesn't need escaping.
String customHtml = "<html><body><a href=\"" + Const.defURL + "\">Load url in webview</a><a href=\"http://stackoverflow.com/\">load in browser</a></body></html>";
// Here you would normally load your page using loadUrl, 
webAbout.loadData(customHtml, "text/html", "UTF-8");

编辑:方法 boolean shouldOverrideUrlLoading(WebView, String) 已标记为已弃用,文档建议使用 boolean shouldOverrideUrlLoading(WebView, WebRequest) 相反。 但是,新方法永远不会被调用。您仍然需要重写 boolean shouldOverrideUrlLoading(WebView, String)。

关于android - WebView - 在外部浏览器中加载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824785/

相关文章:

android - SQLite 正确架构与性能

android - 如何处理 loopj/android-async-http 中的后按 Action

android - 适用于 iOS 和 Android 的 Xamarin Forms Syncfusion sfChart 自定义标签

android - 在 webview 中获取当前 URL

javascript - WebView:在启动 javascript 函数之前等待输入字段存在

android - 如何将接口(interface)附加到 fragment ,Kotlin,Android

android - 有没有办法防止 WebView 在重新加载时丢失 session 信息?

swift - 将 cookie 传递给 WKWebView/SFSafariViewController?

react-native - React Native WebView for Android不显示PDF和Word文件

java - WebView 内容大小