Msgstr "Метатег не найден. ошибка в приложении для мобильного телефона

После обновления Cordova 5.0 в моей системе я создаю новые приложения. Когда я тестировал свое приложение на устройстве, я получаю сообщение об ошибке в журнале консоли:

No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.

Я добавляю мета в разделе главы

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>

Но опять же, у меня такая же ошибка, в моем приложении я использую плагин inappbrowser и 7 других ссылок на сайты.

Ответ 1

После добавления cordova-plugin-whitelist вы должны указать своему приложению разрешить доступ ко всем ссылкам на веб-странице или к определенным ссылкам, если вы хотите сохранить их конкретными.

Вы можете просто добавить это в свой config.xml, который можно найти в корневом каталоге приложения:

Рекомендуется в документации:

<allow-navigation href="http://example.com/*" />

или

<allow-navigation href="http://*/*" />

Из документации плагина:

Белый список навигации

Управляет, с какими URL-адресами можно перемещаться по самому WebView. Относится к только навигационные системы верхнего уровня.

Quirks: на Android он также применяется к iframes для схем, отличных от http (s).

По умолчанию разрешены только навигационные файлы://URL-адреса. Позволять других других URL-адресов, вы должны добавить теги в свои config.xml:

<!-- Allow links to example.com -->
<allow-navigation href="http://example.com/*" />

<!-- Wildcards are allowed for the protocol, as a prefix
     to the host, or as a suffix to the path -->
<allow-navigation href="*://*.example.com/*" />

<!-- A wildcard can be used to whitelist the entire network,
     over HTTP and HTTPS.
     *NOT RECOMMENDED* -->
<allow-navigation href="*" />

<!-- The above is equivalent to these three declarations -->
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="data:*" />

Ответ 2

Вам нужно добавить метатег CSP в главном разделе вашего приложения index.html

Согласно https://github.com/apache/cordova-plugin-whitelist#content-security-policy

Политика безопасности содержимого

Управляет, какие сетевые запросы (изображения, XHR и т.д.) разрешены (через веб-просмотр напрямую).

В Android и iOS белый список сетевых запросов (см. выше) не является возможность фильтровать все типы запросов (например, <video> и WebSockets не заблокирован). Таким образом, помимо белого списка, вы должны использовать Политика безопасности контента <meta> на всех ваших страницах.

В Android поддержка CSP в веб-режиме системы начинается с KitKat (но доступен для всех версий с использованием Crosswalk WebView).

Вот несколько примеров объявлений CSP для ваших страниц .html:

<!-- Good default declaration:
    * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
    * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
    * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
        * Enable inline JS: add 'unsafe-inline' to default-src
        * Enable eval(): add 'unsafe-eval' to default-src
-->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *">

<!-- Allow requests to foo.com -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' foo.com">

<!-- Enable all requests, inline styles, and eval() -->
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

<!-- Allow XHRs via https only -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self' https:">

<!-- Allow iframe to https://cordova.apache.org/ -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; frame-src 'self' https://cordova.apache.org">

Ответ 3

В вашем метатеге есть ошибки.

Yours:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>

Исправлено:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>

Обратите внимание на двоеточие после "script -src" и концевую двойную кавычку метатега.

Ответ 4

Для меня было достаточно переустановить плагин whitelist:

cordova plugin remove cordova-plugin-whitelist

а затем

cordova plugin add cordova-plugin-whitelist

Похоже, что обновление от предыдущих версий Кордовы не было успешным.

Ответ 5

Для меня проблема заключалась в том, что я использовал устаревшие версии кордовой платформы android и ios. Поэтому обновление до android @5.1.1 и [email protected] разрешило его.

Вы можете выполнить обновление до следующих версий:

cordova platforms rm android
cordova platforms add [email protected]
cordova platforms rm ios
cordova platforms add [email protected]