Cordova В браузере приложений App Transport Security - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь загрузить контент в браузере приложений с моего локального сервера (с помощью плагина httpd).веб-страница поступает с https, в то время как локальный сервер загружает, конечно, http.

Я тестирую на Iphone x IOS 12. Использование Adobe Build

Tried:

<access origin='*' allows-arbitrary-loads-in-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-networking='true' />

<edit-config target="NSAllowsArbitraryLoads" file="*-Info.plist" mode="merge">

<true />

</edit-config>

<plugin name="cordova-plugin-transport-security" source="npm" />

Ошибка:

[blocked] The page at https://somewebpage was not allowed to run insecure content from http://127.0.0.1:8080/javascripts/somejsfile.js.

Ничего из этого не помогло.У кого-нибудь есть предложение?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Это не проблема безопасности транспорта приложения, это нарушение политики смешанного контента. Решение:

Для Android: отключите политику смешанного содержимого, поместив следующий код в метод pluginInitialize вашего плагина cordova:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            final WebSettings settings = ((WebView)this.webView.getView()).getSettings();
      settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        } 

https://developer.android.com/reference/android/webkit/WebSettings.html#MIXED_CONTENT_ALWAYS_ALLOW)

Затем включите локальный cordova.js, используя:

<script src="cdvfile://localhost/assets/www/cordova.js"></script>

Для ios: я отправил PR в плагин файла, который решает проблему смешанного содержимого на ios: apache / cordova-plugin-file # 296. Фиксированная версия доступна по адресу: https://github.com/guylando/cordova-plugin-file Если вы загружаете удаленный site https://example.com в веб-представлении, тогда он позволяет получить доступ к локальным файлам, используя url: https://example.com/cdvfile/bundle/www/cordova.js вместо cdvfile: //localhost/bundle/www/cordova.js И этим решаются проблемы со смешанным контентом

Включите локальный cordova.js, используя:

<script src="/cdvfile/bundle/www/cordova.js"></script>
0 голосов
/ 29 мая 2019

Другое решение для Android, которое не меняет настройки безопасности браузера, - это использование "https://cdvfile/assets/www/cordova.js" вместо "cdvfile://localhost/assets/www/cordova.js" и добавление следующей строки к методу remapUri в FileUtils.java (в cordovaплагин файла):

uri = Uri.parse(uri.toString().replace("https://cdvfile/", "cdvfile://localhost/"));

Это загрузит файл как обычно и не заставит веб-просмотр блокировать запрос.

См. PR https://github.com/apache/cordova-plugin-file/pull/322

0 голосов
/ 29 октября 2018

добавить к config.xml :

<allow-navigation href="*" />
<access origin="*" />"
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />

и добавить к index.html Политика безопасности содержимого

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'; img-src * data: 'unsafe-inline'; connect-src * 'unsafe-inline'; frame-src *;">
<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:; style-src 'self' 'unsafe-inline' *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *"> 

и донне забудьте добавить этот плагин cordova-plugin-whitelist в ваш проект

...