【问题标题】:Android WebView new window null URLs on relative links相对链接上的 Android WebView 新窗口空 URL
【发布时间】: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() 中获取网址吗?

【问题讨论】:

    标签: android android-webview webchromeclient


    【解决方案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;
        }
    

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

    【讨论】:

    • 该代码正在运行。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2013-05-31
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多