Java Webview尝试打开所有链接,但应在浏览器中打开
我有一个webview,webview可能包含一个带有两种不同类型链接的网页。我想要的是,如果用户单击包含Java Webview尝试打开所有链接,但应在浏览器中打开,java,android,webview,hyperlink,onclick,Java,Android,Webview,Hyperlink,Onclick,我有一个webview,webview可能包含一个带有两种不同类型链接的网页。我想要的是,如果用户单击包含http://webpagename.com它应该在手机浏览器中打开链接。如果用户单击第二种类型的链接,该链接没有http://,则应将其重定向到新活动。现在发生的事情是,带有http://的链接在网络视图和浏览器中都打开了。但是,没有http://的链接显示网页不可用 在webview中处理onclick链接的代码: // to know which link is clicked
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://
链接始终在浏览器中打开,而其他链接打开一个活动,但在webview中没有打开任何内容?从中,应使用覆盖方法()
返回
如果宿主应用程序希望离开当前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;
}
});
我更改了return super.shouldOverrideUrlLoading(视图、url);返回真值;但都一样。帮不了我是的,我只是仔细看看你的代码。有点不稳定。您不应该在shouldOverrideUrlLoading()
方法内设置另一个WebViewClient
。在一个客户端中覆盖您需要的两种方法,并设置一次。我的意思是,如果它是http url,则该url会按预期在浏览器中打开,但如果它是非http链接,则会显示在webview中找不到的页面,这是对的。我没在想。由于您正在处理这两种情况,因此无论发生什么情况,该方法都应该返回true
,因此从if-else
中取出return
s并将return true代码>在方法的末尾。它可以工作,谢谢!我已经用新代码编辑了你的答案