点击网址打开默认浏览器

我在我的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; } }); }