我正在使用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设备上的这项工作需要进行哪些更改
答案 0 :(得分:1)
来自Android文档
这是Android N之前的
@Deprecated
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
这是Android N
@return如果主机应用程序想要离开当前的WebView,则为True 并处理url本身,否则返回false。
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return true;
}
此方法来自Android N,因此出于这个原因,您只在Android N中遇到此问题。如果返回false,则应解决问题。
答案 1 :(得分:0)
对于任何也磕磕绊绊的人我发现7以下的Android版本允许渲染“.cshtml”文件但是从android 7 nougart开始(7.0,7.1,8.0,8.1等...)只会输出他们的源代码。
我使用的是asp.net项目生成的一些cshtml文件,我将文件从该项目复制到我的xamarin项目中。
将文件的扩展名更改为.html为我修复了它。 :)