我有WebView,其中我想在webview中打开属于域www.example.org的链接,而所有其他链接(如果点击)在我的应用程序之外的默认浏览器中打开。
我尝试使用public boolean shouldOverrideUrlLoading(WebView视图,String url),但它无法正常工作。
以下代码不起作用:
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
URL urlObj = new URL(url);
if (urlObj.getHost().equals("192.168.1.34")) {
view.loadUrl(url);
return true;
} else {
view.loadUrl(url);
return false;
}
} catch (Exception e) {
}
}
}
在这两种情况下(返回true并返回false),URL由我的应用程序处理。
答案 0 :(得分:22)
创建WebViewClient
并将WebView
附加到WebViewClient
后,您已覆盖默认行为,其中Android将允许ActivityManager将URL传递给浏览器(仅当未设置客户端时才会出现此情况)在视图上),请参阅the docs on the method for more。
附加shouldOverrideUrlLoading()
后,返回虚假表单WebView
会将网址传递给WebView
,而返回true会告诉@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
try {
URL urlObj = new URL(url);
if( TextUtils.equals(urlObj.getHost(),"192.168.1.34") ) {
//Allow the WebView in your application to do its thing
return false;
} else {
//Pass it to the system, doesn't match your domain
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
//Tell the WebView you took care of it.
return true;
}
}
catch (Exception e) {
e.printStackTrace();
}
}
什么都不做......因为您的申请将负责处理。不幸的是,这些路径都没有让Android将URL传递给浏览器。这样的事情可以解决你的问题:
return false;
我知道这似乎有点违反直觉,因为您希望WebView
完全绕过WebViewClient
,但在使用自定义{{1}}后情况并非如此。
希望有所帮助!
答案 1 :(得分:5)
如果您无法解释“不能正常工作”的含义,我们就不会为您提供更多具体的帮助。
使用shouldOverrideUrlLoading()
。检查提供的URL。如果您要保留WebView
,请使用网址loadUrl()
上的WebView
,然后返回true
。否则,请返回false
并让Android正常处理。
答案 2 :(得分:1)
将以下内容添加到您的活动中
validate :at_least_one_of_key_or_key_position
private
def at_least_one_of_key_or_key_position
unlsee key.present? || key_position.present?
errors.add(:base, "at least one of key or key_position should exist")
end
end