【问题标题】:Refused to evaluate script because it violates the following Content Security Policy directive: "script-src 'self'"拒绝评估脚本,因为它违反了以下内容安全策略指令:“script-src 'self'”
【发布时间】:2012-09-17 07:20:41
【问题描述】:

我正在学习为 Google Chrome 开发浏览器操作扩展,并将 javascript 功能拆分为多个文件。在 popup.html 文件中,脚本资源的定义如下:

<script src="js/Identity.js"></script>
<script src="js/View.js"></script>

View.js 需要调用从 Identity.js 暴露出来的对象的方法,并传递一个回调函数来通知该过程完成时。但是,Chrome 似乎会中断执行。

拒绝评估脚本,因为它违反了以下内容 安全策略指令:“script-src 'self'”

据我了解,Google 声明该政策是为了防止将任意字符串评估为可执行的逻辑块。但是我在我的对象之间传递实际函数,所以我不太确定这里必须纠正什么?

IdentityObj.Process = function (params, callback) {
  doSomeWork();
  setTimeout(callback(true), 1000); // break here
};

从 View 对象,一个例子是

View.loginClick = function(event) {
        event.preventDefault();
        this.loggingInState();

        var emailAddr = $('#emailAddr').val();
        var password = $('#password').val();
        IdentityObj.login(emailAddr, password, this.loginCallback.bind(this));
    };

View.loginCallback = function(success) {
        if (success) { this.usageState(); }
        else { this.errorState(); }
    };

【问题讨论】:

  • callback 不返回函数。如果不是这样,请显示您的真实代码。
  • 我不明白你的意思。 callback 是来自调用者对象的函数,一旦完成工作,此方法将调用该函数。
  • 显示callback的定义。
  • 添加了查看端代码示例。谢谢。
  • 现在,与原始代码的连接...?

标签: google-chrome google-chrome-extension


【解决方案1】:

我的同事提出了这个问题并解释了它,所以现在我明白你指的是什么了。

我在 setTimeout() 定义中直接执行回调函数,因此 setTimeout() 接收的是 callback(true) 的结果,而不是回调本身。这将需要 eval 并因此触发 Chrome 安全策略。

callback() 的执行必须包含在函数声明中。

IdentityObj.Process = function (params, callback) {
  doSomeWork();
  setTimeout(function(){callback(true)}, 1000); // break here
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2018-07-02
    • 2015-09-21
    相关资源
    最近更新 更多