2011-08-26 118 views
0

我已經編寫了一個Chrome擴展,它爲某些輸入元素添加了字符計數器。沒有用戶界面,它只是注入字符計數代碼,如果用戶在特定頁面上。在我的Google Chrome擴展程序中無法使用localStorage值

輸入中出現多少個字符是有限制的。我最初寫它只是顯示字符的數量,但後來我決定,如果用戶可以選擇查看它們剩下的字符數,它會很好。所以我決定創建一個選項頁面。

在我的選項頁某些時候,我這樣做:

localStorage["count"] = count; // count is the string "countUp" or "countDown" 

原來我不能從contentscript.js訪問options.html的localStorage的,所以我不情願地創建了一個頁面background.html它偵聽來自contentcript的請求並返回內容腳本要求的localStorage值。

在contentscript(簡化的)

var countOption; 

chrome.extension.sendRequest(
    {method: "localStorage", key: "count"}, 
    function(response){ 
     countOption = response.data; 
     console.log(countOption); // returns "countUp" 
    } 
); 

console.log(countOption); // returns undefined 

if(countOption === "countUp") { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 

背景頁

<script type="text/javascript"> 
    chrome.extension.onRequest.addListener(
     function(request, sender, sendResponse) { 
      if(request.method === "localStorage") { 
       sendResponse({data: localStorage[request.key]}); 
      } else { 
       sendResponse({}); 
      } 
     } 
    ); 
</script> 

問題是我不能將值分配給countOption使得它在的範圍可訪問我的腳本的其餘部分。當我在chrome.extension.sendRequest的響應中分配它時this是窗口對象,所以我試圖在全局聲明countOption,但在腳本的其餘部分仍然是undefined

任何人都可以看到我要去哪裏錯了嗎?謝謝。

回答

2

會這樣的工作?

function executeCount(countOption) 
{ 
console.log(countOption); // returns undefined 

if(countOption === "countUp") { 
    doSomething(); 
} else { 
    doSomethingElse(); 
} 
} 

chrome.extension.sendRequest(
    {method: "localStorage", key: "count"}, 
    function(response){ 
     executeCount(response.data); 
    } 
); 
+0

你會認爲它會不會?但不,不幸的是,它不。 – MrMisterMan

+0

它究竟做錯了什麼?是不是調用'executeCount'函數?是否引發錯誤?是否設置了response.data? – Femi

+0

實際上報廢。它確實有用!我的其他邏輯中存在一個錯誤。謝謝! – MrMisterMan

相關問題