"Метатег Content-Security-Policy не найден."ошибка в моем приложении phonegap
после обновления 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'>
но опять же, я получил ту же ошибку, в приложении я использую плагин для браузера в приложении и 7 других ссылок на веб-сайт.
5 ответов:
после добавления Кордова-плагин-белый, вы должны сказать вашему приложению, чтобы разрешить доступ ко всем ссылкам веб-страницы или конкретным ссылкам, если вы хотите сохранить его конкретным.
вы можете просто добавить к вашей config.xml, который можно найти в корневом каталоге вашего приложения:
рекомендовано в документации:
<allow-navigation href="http://example.com/*" />
или:
<allow-navigation href="http://*/*" />
из плагина документация:
Белый Список Навигации
определяет, к каким URL-адресам можно перейти в самом веб-представлении. Распространяться только для навигации верхнего уровня.
причуды: на Android это также относится к iframes для схем без http(S).
по умолчанию разрешены переходы только к файлу: / / URLs. Позволять другие URL-адреса, вы должны добавить теги конфиг.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:*" />
вы должны добавить метатег CSP в головной части вашего приложения
index.html
согласно https://github.com/apache/cordova-plugin-whitelist#content-security-policy
Политика Безопасности Контента
управляет тем, какие сетевые запросы (изображения, XHRs и т. д.) разрешены (непосредственно через webview).
на Android и iOS белый список сетевых запросов (см. выше) не является способный для того чтобы фильтровать все типы запросы (например,
<video>
& WebSockets являются не перекрывать.) Итак, в дополнение к белому списку, вы должны использовать Политика Безопасности Контента<meta>
- тег на всех страницах.на Android поддержка CSP в системе webview начинается с 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">
в вашем метатеге есть ошибки.
С уважением:
<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" и конец двойной кавычки мета-тега.
для меня было достаточно переустановить белый плагин:
cordova plugin remove cordova-plugin-whitelist
а то
cordova plugin add cordova-plugin-whitelist
похоже, что обновление с предыдущих версий Cordova не было успешным.
для меня проблема была в том, что я использовал устаревшие версии cordova android и ios платформ. Так что обновление до android@5.1.1 и ios@4.0.1 ее решили.
вы можете обновить до этих конкретных версий:
cordova platforms rm android cordova platforms add android@5.1.1 cordova platforms rm ios cordova platforms add ios@4.0.1