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

CordovaPhonegap PluginsWhitelist

Cordova Problem Overview


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 Content-Security-Policy meta tag found.
Please add one when using the Cordova-plugin-whitelist plugin.: 23.

I add meta in the head section

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

But again, I got the same error, in the application I use in-app browser plugin and 7 of other website links.

Cordova Solutions


Solution 1 - Cordova

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: > > > http://example.com/*" /> >
> > >
> > >
> > > >

Solution 2 - Cordova

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: > > > https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *"> > > > > > > > > > > > > https://cordova.apache.org">

Solution 3 - Cordova

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.

Solution 4 - Cordova

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.

Solution 5 - Cordova

For me the problem was that I was using obsolete versions of the cordova android and ios platforms. So upgrading to [email protected] and [email protected] 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

Solution 6 - Cordova

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser4809193View Question on Stackoverflow
Solution 1 - CordovaKevalView Answer on Stackoverflow
Solution 2 - CordovatomtasticoView Answer on Stackoverflow
Solution 3 - CordovaKae VerensView Answer on Stackoverflow
Solution 4 - CordovaMaximView Answer on Stackoverflow
Solution 5 - CordovaPierre-Alexis de SolminihacView Answer on Stackoverflow
Solution 6 - CordovaEnes YurtluView Answer on Stackoverflow