我的应用程序有一个WebView
加载一个简单的HTML页面,其中包含一个iFrame,用于从合作伙伴公司加载支付流程的URL(我无权访问该URL源).
当我指向targetSdkVersion
19时一切正常,我可以通过iFrame付款.但是,当targetSdkVersion
指向24时我没有同样的运气.
在这种情况下,WebView
管理加载iFrame,其中显示一些EditText
用于输入信用卡信息和a Button
提交它,但是当我点击该按钮时我总是有错误500.
由于付款URL是外包的,我到达了我们的合作伙伴公司,以便从500错误中了解origem.他们告诉我错误来自双重调用,这让我觉得WebView
来自api 24的东西正在这样做.
500错误的打印:
该HTML
文件payment_html
如下:
它partner_url
被合作伙伴公司的URL取代,我动态地得到它:
private void loadPage() { String url = (String) Session.getObject(Session.Key.PARTNER_URL, ""); InputStream inputStream = mActivity.getResources().openRawResource(R.raw.payment_html); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { int i = inputStream.read(); while (i != -1) { byteArrayOutputStream.write(i); i = inputStream.read(); } inputStream.close(); String html = byteArrayOutputStream.toString(); html = html.replace("partner_url", url); mWebView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null); } catch (IOException e) { Funcoes.printError(e.getMessage()); } }
我设置WebView
如下:
private void setupWebView() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setSupportMultipleWindows(true); webSettings.setJavaScriptCanOpenWindowsAutomatically(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); webSettings.setAllowUniversalAccessFromFileURLs(true); webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); webSettings.setAppCacheEnabled(false); webSettings.setDomStorageEnabled(true); mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); mWebView.addJavascriptInterface(new MyJavaScriptInterface(mActivity), "app"); mWebView.setWebViewClient(new WebViewClient() { @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); }
最后layout.xml
:
正如我之前所说,我没有url的来源,因为它是外包的.所以我不能分享它.
几个星期以来,我一直在努力解决这个问题.谁能帮我?