我试图使一个应用程序与WebView,但网站使用https,但内容(前. mp3文件)使用http,所以Android棒棒糖不会加载它,因为它是“混合内容”.我试图使用onReceivedSslErrorhandler.proceed();,但它不加载任何东西.有没有办法解决它?或者我可以让所有的网站加载使用http,所以它不会显示任何错误?
https
http
onReceivedSslError
handler.proceed();
zmeyuzjn1#
我最近从Crosswalk迁移到使用原生WebView。不得不与这个问题斗争几个小时。修复方法是在设置设置之前运行clearCache()。
webView.clearCache(false); // <-- DO THIS FIRST webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
字符串
qmelpv7a2#
转到manifest.xml并添加以下行。
android:usesCleartextTraffic="true"
字符串并在Webview的Java文件中添加此代码。
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
型
nbewdwxp3#
如果你遇到这个问题,只要确保你已经安装了Ionic的WebView Cordova插件(https://github.com/ionic-team/cordova-plugin-ionic-webview)。最简单的方法是检查你的package.json。安装后:1.打开您的ESP.xml文件1.检查是否有<preference name="Scheme">的条目1.如果是这样,请检查该值是否为“https”。1.如果你没有它,那么添加这一行:<preference name="Scheme" value="https" />1.添加此行:<preference name="MixedContentMode" value="0" />这为我解决了问题。
<preference name="Scheme">
<preference name="Scheme" value="https" />
<preference name="MixedContentMode" value="0" />
hujrc8aj4#
对于那些使用vanilla Cordova的用户,您需要在MainActivity.java中添加onResume函数,并从那里调用setMixedContent,如here所示。
@Override public void onResume() { super.onResume(); // Add the following lines to enable mixed content mode if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { WebView webView = (WebView) appView.getView(); // Change from getEngine() to getView() WebSettings settings = webView.getSettings(); settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } }
yc0p9oo05#
自Pie(API 29)起,应用程序中的所有非HTTPS流量现在默认禁用。
如果您的目标是API level 26或以上,则必须先在manifest文件中启用。添加
字符串转换为<application>标签。从Lollipop(API 21)开始,WebView默认阻止所有混合内容。若要更改此行为,当您的目标是API级别21或更高时,请用途:
<application>
型在此模式下,WebView将尝试与现代Web浏览器在混合内容方面的方法兼容。某些不安全的内容可能会被允许由安全来源加载,而其他类型的内容将被阻止。允许或阻止的内容类型可能会更改发布版本,并且没有明确定义。在实践中,这应该允许加载图像,视频,音乐等-当被恶意第三方篡改/替换时,所有内容都很可能是主要的安全威胁。或者使用**(强烈不鼓励)**:
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
型在此模式下,WebView将允许安全来源从任何其他来源加载内容,即使该来源不安全。这是WebView最不安全的操作模式,并且在可能的情况下,应用程序不应设置此模式。
nhaq1z216#
如果你的min API小于21,并且不能直接调用setMixedContentMode,你可以使用反射:
try { Method m = WebSettings.class.getMethod("setMixedContentMode", int.class); if ( m == null ) { Log.e("WebSettings", "Error getting setMixedContentMode method"); } else { m.invoke(webView.getSettings(), 2); // 2 = MIXED_CONTENT_COMPATIBILITY_MODE Log.i("WebSettings", "Successfully set MIXED_CONTENT_COMPATIBILITY_MODE"); } } catch (Exception ex) { Log.e("WebSettings", "Error calling setMixedContentMode: " + ex.getMessage(), ex); }
fbcarpbf7#
在android pie中除了设置混合内容模式,还需要在AndroidManifest中设置android:usesCleartextTraffic属性。在您的AndroidManifest.xml中执行以下操作:
AndroidManifest
android:usesCleartextTraffic
AndroidManifest.xml
<application .... android:usesCleartextTraffic="true" ...>
字符串设置WebView时,请执行以下操作:
izkcnapc8#
要在API >= 21上有条件地加载它,您不必使用反射。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); }
8条答案
按热度按时间zmeyuzjn1#
我最近从Crosswalk迁移到使用原生WebView。
不得不与这个问题斗争几个小时。修复方法是在设置设置之前运行clearCache()。
字符串
qmelpv7a2#
转到manifest.xml并添加以下行。
字符串
并在Webview的Java文件中添加此代码。
型
nbewdwxp3#
如果你遇到这个问题,只要确保你已经安装了Ionic的WebView Cordova插件(https://github.com/ionic-team/cordova-plugin-ionic-webview)。最简单的方法是检查你的package.json。
安装后:
1.打开您的ESP.xml文件
1.检查是否有
<preference name="Scheme">
的条目1.如果是这样,请检查该值是否为“https”。
1.如果你没有它,那么添加这一行:
<preference name="Scheme" value="https" />
1.添加此行:
<preference name="MixedContentMode" value="0" />
这为我解决了问题。
hujrc8aj4#
对于那些使用vanilla Cordova的用户,您需要在MainActivity.java中添加onResume函数,并从那里调用setMixedContent,如here所示。
字符串
yc0p9oo05#
自Pie(API 29)起,应用程序中的所有非HTTPS流量现在默认禁用。
如果您的目标是API level 26或以上,则必须先在manifest文件中启用。添加
字符串
转换为
<application>
标签。从Lollipop(API 21)开始,WebView默认阻止所有混合内容。
若要更改此行为,当您的目标是API级别21或更高时,请用途:
型
在此模式下,WebView将尝试与现代Web浏览器在混合内容方面的方法兼容。某些不安全的内容可能会被允许由安全来源加载,而其他类型的内容将被阻止。允许或阻止的内容类型可能会更改发布版本,并且没有明确定义。
在实践中,这应该允许加载图像,视频,音乐等-当被恶意第三方篡改/替换时,所有内容都很可能是主要的安全威胁。
或者使用**(强烈不鼓励)**:
型
在此模式下,WebView将允许安全来源从任何其他来源加载内容,即使该来源不安全。这是WebView最不安全的操作模式,并且在可能的情况下,应用程序不应设置此模式。
nhaq1z216#
如果你的min API小于21,并且不能直接调用setMixedContentMode,你可以使用反射:
字符串
fbcarpbf7#
在android pie中除了设置混合内容模式,还需要在
AndroidManifest
中设置android:usesCleartextTraffic
属性。在您的
AndroidManifest.xml
中执行以下操作:字符串
设置WebView时,请执行以下操作:
型
izkcnapc8#
要在API >= 21上有条件地加载它,您不必使用反射。
字符串