我的phonegap应用程序中出现“没有内容安全策略元标记find。”错误

更新我的系统中的cordova5.0后,我创build了新的应用程序。 当我在设备上testing我的应用程序时,在控制台日志中出现错误:

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。

在添加cordova-plugin-whitelist之后,如果要保持特定的链接,则必须告诉应用程序允许访问所有网页链接或特定链接。

您可以简单地将其添加到您的config.xml文件中 ,该文件位于应用程序的根目录中:

在文档中build议

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

要么:

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

从插件的文档:

导航白名单

控制WebView本身可以导航到哪个URL。 仅适用于顶级导航。

怪癖:在Android上,它也适用于非http(s)scheme的iframe。

默认情况下,只允许导航到file:// 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:*" /> 

您必须在应用程序的index.html的头部添加CSP元标记

按照https://github.com/apache/cordova-plugin-whitelist#content-security-policy

内容安全策略

控制哪些networking请求(图像,XHR等)允许(直接通过webview)进行。

在Android和iOS上,networking请求白名单(请参见上文)无法过滤所有types的请求(例如, <video> &WebSockets未被阻止)。 因此,除了白名单外,您还应在所有网页上使用内容安全政策 <meta>标记。

在Android上,系统webview中对CSP的支持从KitKat开始(但在使用Crosswalk WebView的所有版本上都可用)。

以下是您的.html页面的一些示例CSP声明:

 <!-- 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”后面的冒号和meta标签的结尾双引号。

对我来说,重新安装白名单插件就足够了:

 cordova plugin remove cordova-plugin-whitelist 

接着

 cordova plugin add cordova-plugin-whitelist 

它看起来像以前版本的cordova更新不成功。

对我来说,问题是我使用的是cordova androidios平台的过时版本。 所以升级到android@5.1.1ios@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