【问题标题】:Xamarin Forms WebView loading mixed content in AndroidXamarin Forms WebView 在 Android 中加载混合内容
【发布时间】:2018-11-09 10:47:27
【问题描述】:

我有一个 Xamarin Forms WebView。 Source 是一个包含混合内容(指向 https 和 http 资源的链接)的网页。它在 Xamarin Forms iOS 中加载没有问题,但是在 Android 中它不会加载,我怀疑问题是混合内容。

如何设置 MixedContentMode?​​p>

https://docs.microsoft.com/de-de/dotnet/api/xamarin.forms.platformconfiguration.androidspecific.webview.setmixedcontentmode?view=xamarin-forms 有文档

但我不明白如何使用它。谁能举个例子?

非常感谢。

【问题讨论】:

    标签: android xamarin webview xamarin.forms mixed-content


    【解决方案1】:

    这取决于您是否在代码或 XAML 中定义了 WebView

    如果您在代码中定义它,请确保您通过变量名引用它,例如:

    var myWebView = new WebView();

    myWebView 就是我在这种情况下所说的。

    然后,将这个 using 包含在类的顶部:

    using Xamarin.Forms.PlatformConfiguration.AndroidSpecific;

    然后在初始化WebView之后添加这一行:

    myWebView.On<Android>().SetMixedContentMode(MixedContentHandling.AlwaysAllow);

    从 XAML 中,将正确的命名空间添加到页面的根目录,如下所示:

    <ContentPage xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core" ....>

    然后,在您的WebView 上,您可以添加另一个属性:<WebView ... android:WebView.MixedContentMode="AlwaysAllow" />

    这些是所谓的平台特性。您可以直接从 Xamarin.Forms 共享代码设置特定于平台的属性,而不是为一个简单的属性设置自定义呈现器。

    在此处阅读更多信息:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/platform-specifics/ 并在此处消费(实际上是这种特定情况):https://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/platform-specifics/consuming/android#enabling-mixed-content-in-a-webview

    关于您在此处设置的实际内容的注释,在示例中我只是将其设置为AlwaysAllow,确保您知道每个选项的作用并将其设置为最安全的选项。下面是一个小解释,取自 Microsoft Docs:

    • AlwaysAllow - 表示WebView 将允许 HTTPS 源从 HTTP 源加载内容。
    • NeverAllow - 表示WebView 将不允许 HTTPS 源从 HTTP 源加载内容。
    • CompatibilityMode - 表示WebView 将尝试与最新设备网络浏览器的方法兼容。一些 HTTP 内容可能允许由 HTTPS 源和其他 类型的内容将被阻止。内容的类型 阻止或允许可能会随每个操作系统版本而变化。

    【讨论】:

    • 感谢清晰的解释。但是,代码或 XAML 中的 SettingMixedContentMode 不能解决问题。还有什么问题?
    • 您可能应该在运行时仔细检查应用程序的输出。用这么少的信息几乎不可能说出来,抱歉。
    • 应用程序输出:[WebViewFactory] ​​正在加载 com.android.chrome 版本 70.0.3538.80(代码 353808052)[zygote64] 拒绝在先前失败的类 java.lang.Class 上重新初始化:java .lang.NoClassDefFoundError: 解析失败:Landroid/webkit/TracingController;
    • [X509Util] 无法验证证书链,错误:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。
    • 好的,看来证书无效。可以分享网址吗?还是那不可能?
    猜你喜欢
    • 2015-11-16
    • 2017-09-21
    • 2021-09-29
    • 2018-07-15
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多