Après la mise à jour de Cordova 5.0 sur mon système, je crée de nouvelles applications. Lorsque j'ai testé mon application sur un périphérique, une erreur s'est produite dans le journal de la console:
No Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.
J'ajoute meta dans la section head
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>
Mais encore une fois, j'ai eu la même erreur, dans l'application, j'utilise le plug-in de navigateur intégré à l'application et 7 autres liens de sites Web.
Après avoir ajouté cordova-plugin-whitelist , vous devez indiquer à votre application d'autoriser l'accès à tous les liens de page Web ou à des liens spécifiques, si vous souhaitez qu'elle reste spécifique.
Vous pouvez simplement ajouter ceci à votre config.xml , qui se trouve dans le répertoire racine de votre application:
Recommandé dans la documentation:
<allow-navigation href="http://example.com/*" />
ou:
<allow-navigation href="http://*/*" />
De la documentation du plugin:
Liste blanche de navigation
Contrôle les URL vers lesquelles WebView peut être consulté. S'applique uniquement aux navigations de niveau supérieur.
Quirks: on Android il s’applique également aux iframes pour les modèles non-http (s).
Par défaut, les navigations uniquement vers les URL file: // sont autorisées. Pour autoriser d'autres URL, vous devez ajouter des balises à votre 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:*" />
Vous devez ajouter une balise méta CSP dans la section principale du fichier index.html
de votre application.
Selon https://github.com/Apache/cordova-plugin-whitelist#content-security-policy
Politique de sécurité du contenu
Contrôle quelles requêtes de réseau (images, XHR, etc.) sont autorisées à être effectuées (via WebView directement).
Sur Android et iOS, la liste blanche des demandes réseau (voir ci-dessus) ne peut pas filtrer tous les types de demandes (par exemple,
<video>
et WebSockets ne sont pas bloqués). Ainsi, en plus de la liste blanche, vous devez utiliser une balise politique de sécurité du conten<meta>
sur toutes vos pages.Sur Android, la prise en charge de CSP dans la visualisation Web du système commence par KitKat (mais est disponible sur toutes les versions utilisant Crosswalk WebView).
Voici quelques exemples de déclarations CSP pour vos pages
.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">
Il y a des erreurs dans votre balise meta.
Le tiens:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src: 'self' 'unsafe-inline' 'unsafe-eval'>
Corrigée:
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>
Notez les deux points après "script-src", ainsi que la fin de la citation double de la balise meta.
Pour moi, il suffisait de réinstaller liste blanche plugin:
cordova plugin remove cordova-plugin-whitelist
puis
cordova plugin add cordova-plugin-whitelist
Il semble que la mise à jour à partir de versions précédentes de Cordova n’ait pas abouti.
Pour moi, le problème était que j'utilisais des versions obsolètes de Cordova Android et ios plates-formes. Donc, la mise à niveau vers [email protected] et [email protected] l'a résolu.
Vous pouvez mettre à niveau vers ces versions spécifiques:
cordova platforms rm Android
cordova platforms add [email protected]
cordova platforms rm ios
cordova platforms add [email protected]