Android 7.0 及更高版本 Javascript Webview 不工作

Android 7.0 and above Javascript not working Webview

我正在使用 WebView 将支付网关集成到我的应用程序中。我想读取 HTML 内容的响应,基本上它是一个 JSON 对象。这在 6.0 设备上运行良好。但是对于 7.0 和 8.0,我面临 JavaScript 的问题。我正在使用以下代码。

我的代码

    vPayment.loadUrl(myurl);

    wvPayment.getSettings().setJavaScriptEnabled(true);
    wvPayment.getSettings().setDomStorageEnabled(true);
    wvPayment.clearCache(true);
    wvPayment.clearHistory();
    wvPayment.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    wvPayment.addJavascriptInterface(iface, "HTMLOUT");
    wvPayment.setWebChromeClient(new WebChromeClient());
    wvPayment.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            if (request.getUrl().toString().contains("mysuuccessurl")) {
                try {
                    String html = URLDecoder.decode(request.getUrl().toString(), "UTF-8").substring(9);
                    System.out.println("html" + html);
                } catch (UnsupportedEncodingException e) {
                    Log.e("example", "failed to decode source", e);
                }
            }

            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            System.out.println("Start url : " + url);
            customProgressDialog.show();
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            System.out.println("Finish url : " + url);
            if (url.contains(mysuccessurl)) {
                wvPayment.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
            }
            customProgressDialog.dismiss();
        }
    });
JIFace iface = new JIFace();


class JIFace {
    @android.webkit.JavascriptInterface
    public void showHTML(String data) {
       //want to handle the response here

        }
    }
}

上面的代码有什么问题。这项工作在 7.0 及更高版本 android 设备

上需要进行哪些更改

来自 Android 文档

这是前 Android N

@Deprecated
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    return false;
}

这是因为 Android N

@return 如果主机应用程序想要离开当前 WebView,则为真 并处理 url 本身,否则 return false.

@Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return true;
    }

此方法来自 Android N ,因此您仅在 Android N 中遇到此问题。返回 false 应该可以解决您的问题。

对于同样遇到此问题的任何人,我发现 android 7 以下的版本允许呈现“.cshtml”文件,但从 android 7 nougart 开始(7.0 ,7.1,8.0,8.1 etc...) 只会输出它们的源代码。

我正在使用一些由 asp.net 项目生成的 cshtml 文件,我将这些文件从该项目复制到我的 xamarin 项目中。

将文件的扩展名更改为 .html 为我修复了它。 :)