相对链接上的 Android WebView 新窗口空 URL
Posted
技术标签:
【中文标题】相对链接上的 Android WebView 新窗口空 URL【英文标题】:Android WebView new window null URLs on relative links 【发布时间】:2019-04-06 06:54:25 【问题描述】:我实现了一个自定义WebView
并启用了setSupportMultipleWindows()
。因此,我还有一个自定义的 WebChromeClient
覆盖 onCreateWindow()
对于大多数用途,我使用以下 sn-p 在新窗口(即通过 target:_blank
打开)中检索页面的 URL:
Message href = view.getHandler().obtainMessage();
view.requestFocusNodeHref(href);
String url = href.getData().getString("url");
有空检查,但为了简单起见,我在上面的 sn-p 中删除了它们。现在的问题是,有时数据Bundle
(通过getData()
返回)的相对链接的URL 为空(即href="/somepage"
而不是href="https://www.example.com/somepage/"
)。
所以我在 SO 上搜索并找到了另一种可能的解决方案:
WebView.HitTestResult result = view.getHitTestResult();
String url = result.getExtra();
但是,这也返回 null。如果我使用result.getType()
获取数据类型,则返回0,它映射到UNKNOWN_TYPE
。`
我不确定为什么它会为上述方法返回 null。
注:如果我禁用对多个窗口的支持,那些相同的链接就可以正常工作。但是,禁用此类支持不是一种选择。 还有其他方法可以从onCreateWindow()
中获取网址吗?
【问题讨论】:
【参考方案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;
希望这能解决您的问题! (=
【讨论】:
该代码正在运行。感谢您的帮助以上是关于相对链接上的 Android WebView 新窗口空 URL的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让 WebView 在 Android 中自动链接 URL 和电话号码?
Android 有一个界面就是一个webView,这个webView链接的网页打开之后,网页自身会有定位功能