点击网址打开默认浏览器
我在我的WebView
加载了一个外部URL。 现在我需要的是当用户点击加载页面上的链接时,它必须像普通的浏览器一样工作,并在同一个WebView
打开链接。 但是它打开默认浏览器并在那里加载页面?
我已经启用JavaScript。 但还是不行。 我忘了什么吗?
如果您使用的是WebView
,如果您不想使用默认的Android行为,则必须自己拦截点击。
您可以使用WebViewClient
在WebView
监视事件。 你想要的方法是shouldOverrideUrlLoading()
。 这允许您在选择特定的URL时执行自己的操作。
使用setWebViewClient()
方法设置WebView
的WebViewClient
。
如果你看看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; } }); }