2013-03-29 2 views
3

간단한 크롬 확장 코드를 작성하려고하지만 컨텐츠 스크립트 "auto.js"에서 options.html의 로컬 스토리지에 액세스 할 때 약간의 어려움이 있습니다.콘텐츠 스크립트에서 옵션 페이지 localStorage에 액세스

chrome.runtime.sendMessage & chrome.runtime.onMessage.addListener 

내용 스크립트 "auto.js을":이 사용 만 가능 (인터넷 검색 및 크롬의 혼란 문서를 읽고) 수집 한 것과

에서

var quantity = "" 
var shoe_size = "" 

function addToCart() { 

chrome.runtime.sendMessage({localstorage: "qty"}), function(response){ 
    var quantity = response.qty; 
} 

chrome.runtime.sendMessage({localstorage: "size"}), function(response){ 
    var shoe_size = response.size; 
} 
... 

내 청취자 " options.js "

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse){ 

    if(request.localstorage == "qty") 
    sendResponse({qty: localStorage.qty}); 
    else if(request.localstorage == "size") 
    sendResponse({size: localStorage.size}); 
    else 
    sendResponse({}); 
}); 
... 

문제는 내 바르이다 quantityshoe_size은 html 로컬 저장소에서 'returned'값으로 설정되지 않습니다.

내 js 콘솔에 오류가 없습니다.이 오류를 디버깅하는 방법이 확실하지 않습니다. 모든 의견을 크게 주시면 감사하겠습니다.

+0

콘텐츠 스크립트에서 직접 사용할 수 있으므로'chrome.storage' (https://developer.chrome.com/extensions/storage.html)와'localStorage'를 선호합니다. –

답변

3

sendMessage가 트리거 된 직후 sendMessage 다음의 코드가 실행되기 때문입니다. 그들은 설정되어 있지만 응답을 기다리지 않을 것이고, 필요할 때가 지나면 설정됩니다. 나는 이것에 동일한 문제가 여기에서 있었다 Synchronously get Stored data from content scripts. 이를 해결하기 위해 당신이 설정되어 있는지 확인하려면 당신이 내부

chrome.runtime.sendMessage({localstorage: "qty"}), function(response){ 
    var quantity = response.qty; 
} 

원하는 기능을 넣을 수 있습니다,이 테스트 :

chrome.runtime.sendMessage({localstorage: "qty"}), function(response){ 
    var quantity = response.qty; 
} 

alert("waiting for a second, to make sure that response is ready ..."); 
alert("Not it is set:" + quantity); 
+0

당신이 제안한 것처럼 경고를 사용하려고했지만 그 공백을 사용하려고했습니다. 나는 명백한 무엇인가 놓치고 있다고 확신한다. – Snarf

+0

글쎄,'var quantity = response.qty; '바로 뒤에 경고를 추가하여 응답을 얻고 있는지 확인하십시오. –

+0

Ahh ... 응답이 없습니다. – Snarf

0

을 당신은이 sendMessage 첨부 콜백 내부 var 이전에 var quantity = response.qty;을 쓰고있어 기능. 이 변수는 동시에 글로벌 변수와 동일한 이름을 가진 로컬 변수를 생성합니다. 그러나 그것은 다른 변수입니다. 그리고 메모리를 저장하는 메모리는 sendMessage가 끝나자 마자 해제 될 것입니다. 이것은 로컬 스코프이기 때문입니다.

sendMessage 안에 var을 그대로 둡니다.

또한 글로벌 바에 세미콜론이 누락되었습니다. 그 외에는

var quantity = ""; 
var shoe_size = ""; 

, 당신은 sendMessage 첨부 콜백 함수 내에서, 콘텐츠 스크립트 'auto.js'에 console.log를 사용할 수 있습니다. 해당 스크립트를로드하는 웹 페이지의 콘솔에 착륙합니다.

관련 문제