현재 내 사용자 스크립트 중 하나를 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"를 성공적으로 저장하는 것으로 보이지 않습니다.
내가 잘못하고있는 사람을 누구나 볼 수 있습니까? 나는이 시점에서 완전히 잃어 버렸습니다. 특히 값을 분명히 읽는 것이 아무 문제가 아니기 때문에 그렇습니다. 그것은 콘텐츠 스크립트의 전역 변수에 저장합니다. 이것이 바로 문제입니다.
건배 케네스
'sendRequest()'블록이 글로벌 변수에 업데이트 된 값을 갖기를 기대한다면, 비동기 연산이기 때문에 아마 그렇지 않을 것입니다. – Pointy
나는 당신이하는 말을 이해하지 못합니다. 전체 코드는 사실 하나의 메서드 호출이며, 마지막 매개 변수는 응답을 처리하는 함수입니다. 분명히 그 함수의 인쇄가 잘 작동합니다 (콘솔에 올바른 값을 출력합니다). 그래서 같은 값이 전역 변수에 할당되지 않는 이유를 모르겠습니다. 좀 더 자세히 설명해 주시겠습니까? – Kenneth
요점은'sendRequest()'호출과 전달한 콜백 함수 호출 사이에 제어 흐름에 차이가 있다는 것입니다. 코드를 게시 한 후 다음 코드 행은 ** 즉시 ** ** - 그리고 ** ** 전에 콜백의 코드가 실행됩니다. – Pointy