「Content-Security-Policyメタタグが見つかりません。」電話ギャップアプリケーションのエラー


94

システムで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つのWebサイトリンクを使用するアプリケーションで。


3
あなたが正しくインストールされているcordova-plugin-whitelist- github.com/apache/cordova-plugin-whitelistプラグイン?その後<allow-navigation href="http://*/*" />config.xml
Keval

1
<allow-navigation href = "http:// * / *" />を追加した後、Kevalに感謝します。アプリケーションは正常に動作します。感謝します。


3
コードで1文字が欠落しているときにエラーが発生する可能性がある場合、なぜ6文字未満の編集を許可しないのですか?これは修正が非常に簡単で、数秒後に誰かを救うためのものでした。メタタグのコンテンツ属性の最後に二重引用符がありません。
Jason D.

回答:


86

cordova-plugin-whitelistを追加した後、特定のリンクを維持したい場合は、すべてのWebページリンクまたは特定のリンクへのアクセスを許可するようにアプリケーションに指示する必要があります。

これをconfig.xmlに追加するだけです。これはアプリケーションのルートディレクトリにあります。

ドキュメントで推奨

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

または:

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

プラグインのドキュメントから:

ナビゲーションホワイトリスト

WebView自体に移動できるURLを制御します。トップレベルのナビゲーションにのみ適用されます。

癖:Androidでは、非httpスキームの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:*" />


38

アプリのヘッドセクションにCSPメタタグを追加する必要があります index.html

https://github.com/apache/cordova-plugin-whitelist#content-security-policyに従って

コンテンツセキュリティポリシー

どのネットワーク要求(画像、XHRなど)が(直接Webviewを介して)実行できるかを制御します。

AndroidとiOSでは、ネットワークリクエストのホワイトリスト(上記を参照)はすべてのタイプのリクエストをフィルタリングできません(例:<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">

CSP Declerationを追加すると、次のgoogle mapのコードはこのように失敗します。何か案が ?var pos = new google.maps.LatLng(position.coords.latitude、position.coords.longitude); //行173 11-09 21:17:30.724:D / SystemWebChromeClient(25692):file:///android_asset/www/index.html:Line 173:Uncaught ReferenceError:google is not defined
shamaleyte

1
メタタグを/>で閉じる必要がある
metamagikum

23

メタタグにエラーがあります。

あなた:

<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"の後のコロンと、メタタグの最後の二重引用符に注意してください。


3
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"/>イオンフレームワークでライブリロードを含めると機能しなくなるので、他のユーザーに注意してください
CommonSenseCode

@codePlusPlusを使用して、Ionic livereloadを再度アクティブにhttp://localhost:35729し、script-scrディレクティブとws://localhost:35729connect-srcディレクティブに追加します。
kolli 2016年

@kolli、新しいディレクティブがどのように見えるかを示すことができますか?それらをディレクティブに追加する方法は明確ではありません。
jessewolfe

情報は元の投稿にあります。この手段「を追加すること」によって、置き換えることができることを注意:しかし、明確にする script-src 'self' 'unsafe-inline' 'unsafe-eval'script-src 'self' http://localhost:35279 'unsafe-inline' 'unsafe-eval'、あなたは、コンテンツ属性の終わりに分離セミコロンで新しいディレクティブを追加します。; script-src ws://localhost:35279
jessewolfe

上記の修正... 2番目の部分は、である必要があります; connect-src 'self' ws://localhost:35279。'self'を追加するまで、エラーが発生していました(CSP違反のため、file:// <path to index.html>にアクセスできませんでした)。
jessewolfe

2

私にとっては、ホワイトリストプラグインを再インストールするだけで十分でした。

cordova plugin remove cordova-plugin-whitelist

その後

cordova plugin add cordova-plugin-whitelist

Cordovaの以前のバージョンからの更新は成功しなかったようです。


1

私にとっての問題は、私はコルドバの時代遅れのバージョンを使用していたということでしたアンドロイドiOS搭載プラットフォーム。したがって、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

android 5.1.1ですか?
mix3d 2016年

私は@MaximとPierre-Alexis de Solminihacの両方のアドバイスに従い、ついにアプリを正常に動作させました。ありがとう!
ザラカイン

0

接続に関して別の問題があります。接続できるAndroidバージョンもありますが、接続できないAndroidバージョンもあります。だから別の解決策があります

AndroidManifest.xml内:

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

「android:usesCleartextTraffic = "true"」を追加するだけです

そして問題は最終的に解決されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.