Xamarin Forms WebView загрузка смешанного содержимого в Android

У меня есть Xamarin Forms WebView. Источник - это веб-страница, содержащая смешанный контент (ссылки на ресурсы https и http). Он загружается в Xamarin Forms iOS без проблем, однако в Android он не загружается, и я подозреваю, что проблема заключается в смешанном содержимом.

Как я могу установить MixedContentMode?

Документация доступна по адресу https://docs.microsoft.com/de-de/dotnet/api/xamarin.forms.platformconfiguration.androidspecific.webview.setmixedcontentmode?view=xamarin-forms

Но я не понимаю, как это использовать. Может кто-нибудь привести мне пример?

Большое спасибо.


person mrd    schedule 09.11.2018    source источник


Ответы (1)


Это немного зависит от того, определили ли вы свой WebView в коде или XAML.

Если вы определили его в коде, убедитесь, что у вас есть ссылка на него по имени переменной, например:

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-specificics/consuming/android#enable-mixed-content-in-a-webview

Замечание о том, что вы здесь устанавливаете. В этом примере я просто установил для него значение AlwaysAllow, чтобы вы знали, что делает каждый параметр, и установили для него наиболее безопасный. Вот небольшое объяснение, взятое из Документов Microsoft:

  • AlwaysAllow - указывает, что WebView позволит источнику HTTPS загружать контент из источника HTTP.
  • NeverAllow - указывает, что WebView не позволит источнику HTTPS загружать контент из источника HTTP.
  • CompatibilityMode - указывает, что WebView будет пытаться быть совместимым с подходом последней версии веб-браузера устройства. Некоторому содержимому HTTP может быть разрешено загружать источник HTTPS, а другие типы содержимого будут заблокированы. Типы заблокированного или разрешенного содержимого могут изменяться с каждым выпуском операционной системы.
person Gerald Versluis    schedule 09.11.2018
comment
Танки за внятное объяснение. Однако SettingMixedContentMode в коде или XAML не решает проблему. В чем еще может быть проблема? - person mrd; 09.11.2018
comment
Вероятно, вам следует внимательно проверять вывод приложения во время работы. С этой небольшой информацией почти невозможно сказать, извините. - person Gerald Versluis; 09.11.2018
comment
Вывод приложения: [WebViewFactory] Загрузка com.android.chrome версии 70.0.3538.80 (код 353808052) [zygote64] Отклонение повторной инициализации ранее неудачного класса java.lang.Class ‹uO›: java.lang.NoClassDefFoundError: Не удалось разрешить : Landroid / webkit / TracingController; - person mrd; 09.11.2018
comment
[X509Util] Не удалось проверить цепочку сертификатов, ошибка: java.security.cert.CertPathValidatorException: якорь доверия для пути сертификации не найден. - person mrd; 09.11.2018
comment
Хорошо, похоже, сертификат недействителен. Вы можете поделиться URL-адресом? Или это невозможно? - person Gerald Versluis; 09.11.2018
comment
Я вижу, что несколько шрифтов загружаются через HTTP. Вы являетесь владельцем сайта? Вы можете это изменить? Тем не менее, смешанный контент должен работать для этого - person Gerald Versluis; 09.11.2018