点击网址打开默认浏览器

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

我已经启用JavaScript。 但还是不行。 我忘了什么吗?

    如果您使用的是WebView ,如果您不想使用默认的Android行为,则必须自己拦截点击。

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

    使用setWebViewClient()方法设置WebViewWebViewClient

    如果你看看SDK中的WebView示例,那么就有一个正是你想要的东西的例子。 这很简单:

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

    在某些情况下,如果您获得不会触发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); } } 

    官方文档说,单击WebView中的链接将启动处理URL的应用程序。 您需要重写此默认行为

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

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

     myWebView.setWebViewClient(new WebViewClient()); 

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

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

    Arulx Z的回答正是我所期待的。

    我正在用导航抽屉与recyclerview和webviews,用于保持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)

    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; } }); }