【发布时间】:2018-03-06 05:23:51
【问题描述】:
我正在使用 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 及以上的安卓设备上这项工作需要哪些改变
【问题讨论】:
-
将 window.HTMLOUT 更改为 HTMLOUT
-
同样的问题 JavaScript 当前被禁用或您的浏览器不支持
标签: javascript android android-webview