39

我的 Chrome 应用程序具有以下清单:

{
    "name": ",
    "version": "1.0.3",
    "manifest_version": 2,
    "description": "Chrome Extension for.",
    "icons": {
        "16": "images/test.png",
        "19": "images/test.png",
        "256": "images/test.png"
    },
    "app": {
        "background": {
            "scripts": [
                "background.js"
            ]
        }
    },

    "sandbox": {
        "js": [
            "lib/test-api.js"
        ]
    },
    "permissions": [
        "<all_urls>",
        "notifications",
        "storage",
        "videoCapture"
    ]
}

我有一个运行的脚本文件eval。我已阅读有关CSP和沙盒的信息,但仍然收到此错误:

拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' 不是以下内容安全策略指令中允许的脚本来源:“default-src 'self' chrome-extension-resource:”。请注意,'script-src' 没有显式设置,因此 'default-src' 用作后备。

4

2 回答 2

46

您是否尝试过根据CSP链接将 CSP 行添加到清单中?

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
于 2014-01-15T07:03:50.387 回答
36

您展示的不是Chrome扩展程序,而是Chrome 应用程序
Chrome 扩展将让您放宽默认的内容安全策略;Chrome 应用程序不会。(来源:Chrome 应用程序的 CSP 文档;注意:此页面与Chrome 扩展程序的 CSP 文档不同)。

下一行适用于应用程序和扩展程序:

  • 内容安全策略不适用于特定的脚本,而是整个页面。因此,您只能为整个页面声明一个沙箱(使用sandbox.pages清单文件中的密钥)。您不能使用“js”作为沙箱中的键。

在 Chrome 扩展中,CSP 可以放宽,例如允许eval使用以下策略:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

在扩展中打开您的应用程序:不要使用apps密钥,而是使用background密钥。使用以下清单,您将能够eval在后台页面中使用:

{
    "name": "Whatever",
    "version": "1.0.3",
    "manifest_version": 2,
    "background": {
        "scripts": [
            "background.js"
        ]
    },
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}

(省略icons/permissions因为它们与示例无关;省略sandbox因为不需要)

于 2014-01-15T09:10:32.970 回答