1

현재 내 사용자 스크립트 중 하나를 Chrome 확장 프로그램으로 변환 중입니다. 내가 아직도 붙어있는 유일한 문제는 내 콘텐츠 스크립트의 변수에 localStorage 값을 저장하는 것입니다. 여기에 하나의 예를 들겠습니다. 다른 예는 비슷하지만 다른 이름으로 나와 있습니다.Chrome 확장 프로그램 : 콘텐츠 스크립트에서 localStorage 값을 부울로 변환합니다.

var REMOVE_WARNINGS; 

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

당신이 볼 수 있듯이, 나는 "REMOVE_WARNINGS"에 할당 된 값에 대한 내 확장의 로컬 스토리지를 쿼리합니다. 콘텐츠 스크립트에서 더 이상이 변수가 특정 동작을 수행해야하는지 여부를 확인하기 때문에이 작업을 수행합니다. 원래 값은 true 또는 false 중 하나 인 HTML 옵션에 의해 옵션 페이지를 통해 localStorage에 할당되며 문제는 발생하지 않습니다. "true"(또는 "false") 값을 콘텐트 스크립트의 메서드로 성공적으로 반환하고 체크했기 때문에 콘솔에 출력됩니다. 무엇 아니요 작동하지 내 콘텐츠 스크립트에서 전역 변수 REMOVE_WARNINGS에 값을 할당합니다.

나는 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. 사실, 크롬 요청 콜의 내부에서 물건을하는 것은 매력처럼 작동합니다! – Kenneth

+0

당신을 도울 수있어서 기뻤습니다 :) –

관련 문제