相对链接上的 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链接的网页打开之后,网页自身会有定位功能

如何在 Android 的 WebView 中显示 PDF?

Android webview中如何播放网络视频

Android WebView 不会加载本地文件

根据按钮链接在webview中显示特定的url