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

时间:2012-09-25 18:05:11

标签: google-chrome google-chrome-extension

我正在学习为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(); }
    };

1 个答案:

答案 0 :(得分:2)

我的同事解决了问题并对其进行了解释,所以现在我明白了你的意思。

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

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

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