首页 文章

单击URL将打开默认浏览器

提问于
浏览
199

我在 WebView 中加载了一个外部URL . 现在我需要的是当用户点击加载页面上的链接时,它必须像普通浏览器一样工作并打开相同的链接 WebView . 但它打开默认浏览器并在那里加载页面?

我启用了JavaScript . 但它仍然无法正常工作 . 我忘记了什么吗?

6 回答

  • 54

    在你的代码中添加这2行 -

    mWebView.setWebChromeClient(new WebChromeClient()); 
    mWebView.setWebViewClient(new WebViewClient());
    
  • 6

    如果您使用的是 WebView ,则需要默认的Android行为 .

    您可以使用WebViewClient监视 WebView 中的事件 . 你想要的方法是shouldOverrideUrlLoading() . 这允许您在选择特定URL时执行自己的操作 .

    使用setWebViewClient() method设置 WebViewWebViewClient .

    如果你看WebView sample in the SDK那里's an example which does just what you want. It'就像这样简单:

    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
    
  • 25

    在某些情况下,如果获得不会触发url加载方法的重定向,则可能需要覆盖onLoadResource . 在这种情况下,我尝试了以下内容:

    @Override
    public void onLoadResource(WebView view, String url)
    {
        if (url.equals("http://redirectexample.com"))
        {
            //do your own thing here
        }
        else
        {
            super.onLoadResource(view, url);
        }           
    }
    
  • 13

    官方documentation说,单击WebView中的链接将启动处理URL的应用程序 . 您需要覆盖此默认行为

    myWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });
    

    或者如果方法中没有条件逻辑,只需执行此操作即可

    myWebView.setWebViewClient(new WebViewClient());
    
  • 6

    Arulx Z的答案正是我所寻找的 .

    我正在使用带有recyclerview和webviews的Navigation Drawer编写一个应用程序,用于在应用程序内部保持Web浏览,而不管单击的超链接(因此不启动外部Web浏览器) . 为此,只需输入以下两行代码即可:

    mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

    完全在您的WebView语句下 .

    这是我实现的WebView代码的示例:

    public class WebView1 extends AppCompatActivity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
        wv.setWebViewClient(new WebViewClient());    //the lines of code added
        wv.setWebChromeClient(new WebChromeClient()); //same as above
    
        wv.loadUrl("http://www.google.com");
    }}
    

    这样,点击网站中的每个链接都会加载到WebView中 . (使用Android Studio 1.2.2并更新所有SDK)

  • 342

    方法 boolean shouldOverrideUrlLoading(WebView view, String url) 在API 24中已弃用 . 如果您支持新设备,则应使用 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) .

    您可以通过执行以下操作来使用它们:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        newsItem.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(request.getUrl().toString());
                return true;
            }
        });
    } else {
        newsItem.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
    }
    

相关问题