2

我需要一些关于如何获取我的 chrome 清单以允许服务器和应用程序之间进行 Google API 对话的扩展的建议。当我直接指向它(而不是作为扩展)时,应用程序加载正常。

但是我的问题是,当我将其作为扩展加载时,出现以下错误:

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 的日历 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

根据有关内容安全策略配置的文档,更具体地说是针对以下内容的策略eval()

可以通过在您的策略中添加 'unsafe-eval' 来放宽针对eval ()及其亲属的策略,如setTimeout (String)setInterval (String)new Function (String) [...]

但是,我们强烈建议不要这样做。这些函数是臭名昭著的XSS 攻击向量。

(强调我的)

因此,在您的内容安全策略中添加“不安全评估”可能是一种解决方案(但在其他方面肯定不是一个好的解决方案)。

Pinoyyid 建议使用普通的XMLHttpRequests可以证明是一种更好的方法(如有必要将withcredentials属性设置为true)。

于 2013-11-03T13:48:21.683 回答
1

这是我的扩展中的一个示例。在这种情况下,我调用 Drive 'trash' 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,而是使用了一个 JS 库,它围绕 XMLHttpRequest 对象创建了一个 JSON 包装器。

于 2013-11-05T06:16:11.153 回答