我已经实现了启用WebView
的自定义setSupportMultipleWindows()
。因此,我还有一个自定义WebChromeClient
,它将覆盖onCreateWindow()
对于大多数用途,我使用以下代码段在新窗口(即通过target:_blank
打开的页面)中检索页面的URL:
Message href = view.getHandler().obtainMessage();
view.requestFocusNodeHref(href);
String url = href.getData().getString("url");
有空检查,但为简单起见,我在上面的代码段中将其删除。现在的问题是,有时数据Bundle
(通过getData()
返回)的相对链接(即href="/somepage"
而非href="https://www.example.com/somepage/"
)具有空URL。
所以我搜索了SO,找到了另一个可能的解决方案:
WebView.HitTestResult result = view.getHitTestResult();
String url = result.getExtra();
但是,它也返回null。如果我使用result.getType()
获得数据类型,它将返回0,它映射到UNKNOWN_TYPE
。`
我不确定为什么上述方法返回null。
N.B.如果我禁用了对多个窗口的支持,那么那些相同的链接就可以正常工作。但是,禁用这种支持不是一种选择。 是否还有另一种方法可以从onCreateWindow()
中获取URL?
答案 0 :(得分:0)
我尚未验证,但是您可以尝试以下操作:
@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;
}
希望这可以解决您的问题! (=