我正在使用webview,webview可能包含一个包含两种不同类型链接的网页。我想要的是,如果用户点击包含http://webpagename.com
的链接,则应该在手机的浏览器中打开该链接。如果用户点击没有http://
的第二类链接,则应将其重定向到新活动。现在正在发生的事情是,http://
的链接在网页浏览和浏览器中都是开放的。但是,没有http://
的链接显示网页不可用。
在webview中处理onclick链接的代码:
// to know which link is clicked
holder.webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
holder.webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest (final WebView view, String url) {
if (url != null && url.startsWith("http://")) {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return null;
}
else {
Log.e("URL: ", url);
System.out.println(url.replace(url.substring(0,url.lastIndexOf("/")+1), ""));
return null;
}
}
/**
* Return WebResourceResponse with CSS markup from a String.
*/
});
return super.shouldOverrideUrlLoading(view, url);
}
});
我应该怎么做才能确保http://
链接始终在浏览器中打开,其他链接打开活动,但在网页视图中没有打开任何内容?
答案 0 :(得分:1)
从docs for WebViewClient
,shouldOverrideUrlLoading()
方法:
<强>返回强>
如果主机应用程序想要离开当前的WebView并处理URL本身,则为true,否则返回false。
由于您正在处理WebView的内容并重定向到“活动”,因此此方法应显式返回true
,而不是super
方法的返回值。
根据您的说明和代码,您似乎无需覆盖shouldInterceptRequest()
方法。
holder.webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url != null && url.startsWith("http://"))
{
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
else
{
Log.e("URL: ", url);
System.out.println(url.replace(url.substring(0, url.lastIndexOf("/") + 1), ""));
// Start your app's Activity here
}
return true;
}
});