Android WebView新窗口相对链接上的空URL

时间:2018-11-02 01:38:27

标签: 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");

有空检查,但为简单起见,我在上面的代码段中将其删除。现在的问题是,有时数据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?

1 个答案:

答案 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;
    }

希望这可以解决您的问题! (=