मेरे ऐप में WebView
है जो एक आईफ़्रेम के साथ एक साधारण HTML पृष्ठ लोड करता है जिसका उपयोग पार्टनर कंपनी से भुगतान प्रक्रिया के लिए यूआरएल लोड करने के लिए किया जाता है (और मेरे पास उस यूआरएल स्रोत तक कोई पहुंच नहीं है)।targetSdkVersion के साथ वेबव्यू में त्रुटि 24
जब मैं targetSdkVersion
से 1 9 तक इंगित करता हूं तो सबकुछ ठीक काम करता है और मैं आईफ्रेम के माध्यम से भुगतान कर सकता हूं। हालांकि, जब targetSdkVersion
24 की ओर इशारा किया गया है तो मेरे पास एक ही भाग्य नहीं है।
उस मामले में, WebView
iFrame जो क्रेडिट कार्ड की जानकारी और इसे प्रस्तुत करने के लिए एक Button
साथ प्रवेश करने के लिए कुछ EditText
दिखाया गया है लोड करने के लिए प्रबंधन करता है, लेकिन जब मैं उस बटन पर क्लिक करें मैं हमेशा एक त्रुटि 500 है।
चूंकि भुगतान यूआरएल आउटसोर्स किया गया है, इसलिए मैं 500 साझेदार से उत्पत्ति को जानने के लिए हमारी साझेदार कंपनी पहुंचा। और उन्होंने मुझे बताया कि त्रुटि एक डबल कॉल से आती है जो मुझे लगता है कि एपीआई 24 से WebView
में कुछ ऐसा कर रहा है।
HTML
फ़ाइल payment_html
निम्नलिखित है:
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
</head>
<body id="bodyContent" onload="addListener()" style="margin:0px;padding:0px;overflow:hidden;height:355px">
<iframe id="ifrPagamento" src="partner_url"
frameborder="0" style="overflow:hidden;width:100%;height:100%"></iframe>
</body>
<script type="text/javascript">
function addListener() {
window.addEventListener("message", receiveMessage, false);
}
function receiveMessage(message) {
if (message) {
var data = JSON.parse(message.data);
if (data.code) {
if(data.code === "0") {
app.returnStatus(0);
}
else {
app.returnStatus(1);
}
}
}
}
</script>
</html>
partner_url
साथी कंपनी के URL से बदला है और मैं इसे प्रभावी रूप से bellow मिलती है:
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
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:background="@color/white">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
</WebView>
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone"/>
</RelativeLayout>
जैसा कि मैंने पहले कहा, मैं यूआरएल के स्रोत है क्योंकि यह आउटसोर्स है नहीं है। तो मैं इसे साझा नहीं कर सकता।
मैं इस मुद्दे के साथ कुछ हफ्तों तक संघर्ष कर रहा हूं। क्या कोई मेरी मदद कर सकता है?
निकालें इस लाइन और, एपीआई 24 में जाँच करता है, तो (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled (सही); } – Nainal
ऐसा नहीं है।यह लाइन ब्राउज़र के माध्यम से डीबगिंग की अनुमति देने के लिए है और केवल किटकैट और उच्चतर के लिए काम करती है। –
क्या यह एपीआई 23 में काम कर रहा है? –