2012-09-25 50 views
0

我正在學習開發谷歌瀏覽器瀏覽器操作的擴展,並JavaScript功能拆分成多個文件。在popup.html文件,腳本資源被定義像拒絕了,因爲它違反了以下內容安全政策指令,以評估劇本:「劇本-src的‘自我’」

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

View.js需要調用成從Identity.js曝光的物體的方法,以及通過在該過程完成時被通知的回調函數。但是,Chrome似乎會破壞執行。

拒絕,因爲它違反了以下內容 安全政策指令,以評估劇本:「劇本-src的‘自我’」

從我個人理解,谷歌指出,政策是爲了防止任意字符串被評估爲可執行的邏輯塊。但是,我正在傳遞實際功能在我的對象之間,所以我不太確定這裏必須糾正什麼?

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

從視圖對象,一個例子是

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(); } 
    }; 
+0

'callback'不返回的功能。如果情況並非如此,請展示您的真實代碼。 –

+0

我不明白你的意思。回調是來自調用者對象的函數,該方法在完成該工作後將調用該函數。 – icelava

+0

顯示'callback'的定義。 –

回答

2

我的同事炫耀的問題,並解釋它,所以現在我明白你指的是什麼。

我是執行直接在setTimeout()定義的回調函數,所以setTimeout()接收回調結果(true)而不是回調本身。這就需要eval,從而觸發Chrome安全策略。

回調的執行()具有被包裹在一個函數聲明。

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