“No Content-Security-Policy meta tag found.” error in my phonegap application

后端 未结 6 650
再見小時候
再見小時候 2020-11-27 10:28

After update Cordova 5.0 in my system, I create new applications. When I tested my application on a device that time I get an error in the console log:

No Co         


        
相关标签:
6条回答
  • 2020-11-27 10:32

    For me the problem was that I was using obsolete versions of the cordova android and ios platforms. So upgrading to android@5.1.1 and ios@4.0.1 solved it.

    You can upgrade to these specific versions:

    cordova platforms rm android
    cordova platforms add android@5.1.1
    cordova platforms rm ios
    cordova platforms add ios@4.0.1
    
    0 讨论(0)
  • 2020-11-27 10:35

    There is an another issue about connection. Some android versions can connect but some cannot. So there is an another solution

    in AndroidManifest.xml:

    <application ... android:usesCleartextTraffic="true">
            ...
        </application>

    Just add 'android:usesCleartextTraffic="true"'

    and problem solved finally.

    0 讨论(0)
  • 2020-11-27 10:37

    You have to add a CSP meta tag in the head section of your app's index.html

    As per https://github.com/apache/cordova-plugin-whitelist#content-security-policy

    Content Security Policy

    Controls which network requests (images, XHRs, etc) are allowed to be made (via webview directly).

    On Android and iOS, the network request whitelist (see above) is not able to filter all types of requests (e.g. <video> & WebSockets are not blocked). So, in addition to the whitelist, you should use a Content Security Policy <meta> tag on all of your pages.

    On Android, support for CSP within the system webview starts with KitKat (but is available on all versions using Crosswalk WebView).

    Here are some example CSP declarations for your .html pages:

    <!-- 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">
    
    0 讨论(0)
  • 2020-11-27 10:39

    There are errors in your meta tag.

    Yours:

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

    Corrected:

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

    Note the colon after "script-src", and the end double-quote of the meta tag.

    0 讨论(0)
  • 2020-11-27 10:40

    After adding the cordova-plugin-whitelist, you must tell your application to allow access all the web-page links or specific links, if you want to keep it specific.

    You can simply add this to your config.xml, which can be found in your application's root directory:

    Recommended in the documentation:

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

    or:

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

    From the plugin's documentation:

    Navigation Whitelist

    Controls which URLs the WebView itself can be navigated to. Applies to top-level navigations only.

    Quirks: on Android it also applies to iframes for non-http(s) schemes.

    By default, navigations only to file:// URLs, are allowed. To allow other other URLs, you must add tags to your 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:*" />
    
    0 讨论(0)
  • 2020-11-27 10:57

    For me it was enough to reinstall whitelist plugin:

    cordova plugin remove cordova-plugin-whitelist
    

    and then

    cordova plugin add cordova-plugin-whitelist
    

    It looks like updating from previous versions of Cordova was not succesful.

    0 讨论(0)
提交回复
热议问题