2

サーバーとアプリケーション間の Google API 通信を可能にする拡張機能の chrome マニフェストを取得する方法についてアドバイスが必要です。アプリケーションを直接(拡張機能としてではなく)指定すると、アプリケーションは正常にロードされます。

ただし、私の問題は、拡張機能としてロードすると、次のエラーが発生することです。

Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' https://apis.google.com/".

このアプリケーションは、Google の Calendar API と連携するように構築されています。

これは私のHTMLヘッダーが(ローカルで)どのように見えるかです:

<head>
    <link href='reset.css' rel="stylesheet" type="text/css">
     <link href='style.css' rel="stylesheet" type="text/css">
    <link href='animate-custom.css' rel="stylesheet" type="text/css">
     <script type="text/javascript" src="jquery.min.js"></script>
     <script src="https://apis.google.com/js/client.js?onload=onClientLoad" type="text/javascript"></script> 
    <script src="main.js" type="text/javascript"></script>
    <script type="text/javascript" src="moment_langs.js"></script>

    <title>Dashboard</title>
</head>

これは、ロードされたときの様子です (**スクリプトがロードされます - API 呼び出しを推測しますか?):

<link href='reset.css' rel="stylesheet" type="text/css">
     <link href='style.css' rel="stylesheet" type="text/css">
    <link href='animate-custom.css' rel="stylesheet" type="text/css">
**<script src="https://apis.google.com/_/scs/apps-static/_/js/k=oz.gapi.en.lm_l25KfNhA.O/m=client/rt=j/sv=1/d=1/ed=1/am=AQ/rs=AItRSTM1DJ5OrFPvETO8O24EqSIF_JCoKQ/cb=gapi.loaded_0" async=""></script>**
     <script type="text/javascript" src="jquery.min.js"></script>
     <script src="https://apis.google.com/js/client.js?onload=handleClientLoad" type="text/javascript"></script> 
    <script src="main.js" type="text/javascript"></script>
    <script type="text/javascript" src="moment_langs.js"></script>

私のマニフェスト:

{
  "manifest_version": 2,
  "name": "My Dashboard",
  "version": "1.2",
  "content_security_policy": "script-src 'self' https://apis.google.com/; object-src 'self'",
  "permissions": [
    "webRequest",
    "*://*.googleapis.com/*",
    "*://*.apis.google.com/*"
  ],


    "chrome_url_overrides" : {
    "newtab": "index.html"
  }
}
4

2 に答える 2

1

これが私の拡張機能の例です。この場合、ドライブの「ゴミ箱」API を呼び出しています。

            var xhr = new window['JSONHttpRequest']();

            xhr.open("POST", "https://www.googleapis.com/drive/v2/files/" + id + "/trash", true);
            xhr.setRequestHeader('Authorization', 'Bearer ' + token); // token comes from chrome.identity
            xhr.setRequestHeader('Content-Type', 'application/json');
            xhr.sendJSON(dmark);

生の XMLHttpRequest ではなく、XMLHttpRequest オブジェクトの周りに JSON ラッパーを作成する JS ライブラリを使用します。

于 2013-11-05T06:16:11.153 に答える
1

コンテンツ セキュリティ ポリシーの構成に関するドキュメント、より具体的には以下に対するポリシーeval()によると:

eval ()およびsetTimeout (String)setInterval (String)new Function (String)などの関連するポリシーは、ポリシーに「unsafe-eval」を追加することで緩和できます [...]

ただし、これを行わないことを強くお勧めします。これらの関数は、悪名高いXSS 攻撃ベクトルです。

(私のものを強調)

したがって、'unsafe-eval' をcontent-security-policyに追加することが解決策になる可能性があります (ただし、他の面では確実に良い方法ではありません)。

プレーンなXMLHttpRequestsを使用するという Pinoyyid の提案は、より良いアプローチを証明する可能性があります (必要に応じて、withcredentials属性を にtrue)。

于 2013-11-03T13:48:21.683 に答える