1

我目前正在將我的一個用戶腳本轉換爲Chrome擴展。我仍然堅持的唯一事情是成功地將localStorage值存儲在我的內容腳本中的變量中。我將在這裏舉一個例子,其他的類似,但有其他名字。您可以看到,我查詢了我的擴展的localStorage中分配給「REMOVE_WARNINGS」的值。我這樣做是因爲在內容腳本中進一步檢查這個變量是否需要執行某些操作。原始值在localStorage中通過選項頁面通過HTML選項分配,無論是true還是false,這都是沒有問題的。值「true」(或「false」)成功返回到內容腳本的方法並打印在控制檯中,因爲我已經檢查過它。什麼不是工作是將值分配給我的內容腳本中的全局變量REMOVE_WARNINGS。Chrome擴展程序:在內容腳本中將localStorage值轉換爲布爾值

我試過了幾個選項,其中包括REMOVE_WARNINGS = response.status;REMOVE_WARNINGS = response.status == "true";,我也嘗試刪除控制檯輸出行,認爲它可能會破壞性打印。這些選項似乎都沒有在全局變量中成功存儲布爾值「true」或「false」,因爲腳本不執行應該執行的操作。

有沒有人看到我在做什麼錯在這裏?我完全失去了這一點,特別是因爲清楚地閱讀價值是沒有問題的。它將其存儲在內容腳本的全局變量中,這就是問題所在。

乾杯 肯尼斯

+0

如果您希望在sendRequest()塊之後的代碼行在您的全局變量中具有更新值,那麼它可能不會,因爲這是異步操作。 – Pointy

+0

我不明白你想說什麼。整段代碼實際上是一個方法調用,最後一個參數是處理答案的函數。顯然,該函數中的打印工作正常(它將正確的值輸出到控制檯),所以我不知道爲什麼相同的值不會分配給全局變量。 請您再詳細說明一下嗎? – Kenneth

+0

我的觀點是,在調用'sendRequest()'和調用傳遞給你的回調函數之間的控制流之間存在差距。你發佈的代碼之後的下一行代碼將立即發生** - 並且**之前**回調中的代碼運行。 – Pointy

回答

3

請糾正我,如果我錯了,但我認爲你正在試圖做的是這樣的:

var REMOVE_WARNINGS; 

chrome.extension.sendRequest({method: "REMOVE_WARNINGS"}, function(response) { 
    console.log(response.status); 
    REMOVE_WARNINGS = response.status == "true"; 
}); 
console.log(REMOVE_WARNINGS); //this console.log will fail? right? 

試圖修改這樣的代碼:

chrome.extension.sendRequest({method: "REMOVE_WARNINGS"}, function(response) { 
    console.log(response.status); 
    REMOVE_WARNINGS = response.status == "true"; 
    doSomething(); 
}); 

function doSomething() { 
    console.log(REMOVE_WARNINGS); //this one should work 
} 
+0

謝謝你和@Pointy。事實上,在Chrome請求調用中執行這些操作就像魅力一樣! – Kenneth

+0

很高興幫助你:) –

相關問題