在配置了 WebView 和 WebViewClient 的 Android 应用中,在从 js 调用window.open(url, '_system')之后,会在调用Android WebViewClient.shouldOverrideUrlLoading之前触发js 事件window.beforeunload。这是一个适当的和预期的行为吗?有没有办法在没有触发 window.beforeunload 事件的情况下拦截打开的 url?
问问题
202 次
1 回答
1
看这个示例代码,也许对你有帮助:
final WebView webView = (WebView)findViewById(R.id.webview);
// Enable javascript
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
final Uri uri = Uri.parse(url);
return customUriHanlder(uri);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
return customUriHanlder(uri);
}
private boolean customUriHanlder(final Uri uri) {
Log.i(TAG, "Uri =" + uri);
final String host = uri.getHost();
final String scheme = uri.getScheme();
// you can set your specific condition
if (true) {
// Returning false means that you are going to load this url in the webView itself
return false;
} else {
// Returning true means that you need to handle what to do with the url
// open web page in a Browser
final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return true;
}
}
});
// Load the webpage
webView.loadUrl("https://google.com/");
使用customUriHanlder
功能,您可以在 vebview 本身或浏览器中加载您的 url。
在 google 文档上shouldOverrideUrlLoading
:如果提供了 WebViewClient,返回true
会导致当前 WebView 中止加载 URL,而返回false
会导致 WebView 像往常一样继续加载 URL。
于 2020-05-10T04:24:17.110 回答