naj*_*ajm 5 android android-webview webchromeclient
我实现了自定义WebView与setSupportMultipleWindows()启用。因此,我也有一个WebChromeClient覆盖的自定义onCreateWindow()
对于大多数用途,我使用以下代码段在新窗口(即通过 打开target:_blank)中检索页面的 URL :
Message href = view.getHandler().obtainMessage();
view.requestFocusNodeHref(href);
String url = href.getData().getString("url");
Run Code Online (Sandbox Code Playgroud)
有空检查,但为了简单起见,我在上面的代码片段中删除了它们。现在的问题是,有时数据Bundle(通过 返回getData())具有相对链接的空 URL(即,href="/somepage"而不是href="https://www.example.com/somepage/")。
所以我搜索了 SO 并找到了另一个可能的解决方案:
WebView.HitTestResult result = view.getHitTestResult();
String url = result.getExtra();
Run Code Online (Sandbox Code Playgroud)
但是,这也会返回 null。如果我使用result.getType()它获取数据的类型,则返回 0,它映射到UNKNOWN_TYPE.`
我不确定为什么它为上述方法返回 null。注意,如果我禁用对多个窗口的支持,这些相同的链接就可以正常工作。但是,禁用此类支持不是一种选择。还有另一种方法可以从内部获取 URLonCreateWindow()吗?
小智 1
我没有验证过,但你可以尝试以下方法:
@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {
Logger.d(Constants.TAG, "onCreateWindow"+resultMsg);
WebView targetWebView = new WebView(getActivity()); // pass a context
targetWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url,
Bitmap favicon) {
handleWebViewLinks(url); // you can get your target url here
super.onPageStarted(view, url, favicon);
}
});
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(targetWebView);
resultMsg.sendToTarget();
return true;
}
Run Code Online (Sandbox Code Playgroud)
希望这能解决您的问题!(=
| 归档时间: |
|
| 查看次数: |
968 次 |
| 最近记录: |