在 WebViewClient 的 shouldOverrideUrlLoading 方法中,当检测到新窗口需要打开时,会发送一个 Message 给 WebView,其中包含了新窗口的 URL。可以通过解析 Message 的 data 字段来获取新窗口的 URL。
代码示例:
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (request.isForMainFrame()) {//判读是否是主窗体请求
return false;
} else {
//获取新窗口的 URL
Message msg = Message.obtain();
Bundle bundle = new Bundle();
request.getUrl(); //这里可以获取到新窗口的 URL
bundle.putString("url", request.getUrl().toString());
msg.setData(bundle);
view.getWebViewClient().getHandler().sendMessage(msg);
return true;
}
} else {
return super.shouldOverrideUrlLoading(view, url);
}
}
}