1

콘텐츠 스크립트의 JavaScript localStorage에 문자열 값을 설정하는 Chrome 확장 프로그램이 있습니다. 나는 그것을 잡아서 표시함으로써 그것이 설정되고 있음을 시험했다. 동일한 페이지가로드 된 후에도 자바 스크립트 콘솔에 저장된 문자열에 계속 액세스 할 수 있습니다. 다른 탭 js 콘솔로 이동하거나 다른 확장 기능 배경 페이지 (브라우저 조치가 클릭 된 후)에 액세스하려고하면 null이 리턴됩니다.확장 배경 페이지에서 localStorage에 액세스하는 방법은 무엇입니까?

확장 한 contentscript.js

embeded.addEventListener 
(
"message", 
function(message) 
{ 
    localStorage.setItem("pdf", message.data); 
    loadPDF(message.data); 
}, 
false 
); 

확장이 background.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    if (tab.url.substr(tab.url.length - 4) === ".pdf") 
    {  
    if (localStorage.getItem("pdf") !== null) 
    { 
     alert("boomy"); 
    } 
    } 
}); 
+0

잠깐, 기다려주세요. _separate_ 확장? – Xan

+0

관심의 대상 - 두 개의 개별 확장이있는 이유는 무엇입니까? – Xan

답변

2

localStorage는 확장 페이지 (배경, 옵션, 팝업) 공유하지만, 하지 콘텐츠 스크립트입니다. 그리고 가장 확실하게 2 개의 확장 사이에 공유되지 않습니다!

두 가지 옵션이 있습니다. 두 개의 개별 확장자로 하나의 옵션 만 있습니다.


옵션 1 : 메시징을 사용하십시오.

백그라운드 스크립트와 콘텐츠 스크립트 사이에 값을 전달해야 할 때 메시징을 사용하면됩니다. 한 방향으로 만 전달하면됩니다.

contentscript.js :

embeded.addEventListener(
    "message", 
    function(message) 
    { 
    chrome.runtime.sendMessage(extensionTwoId, {pdf: message.data}); 
    loadPDF(message.data); 
    }, 
    false 
); 

background.js :

chrome.runtime.onMessageExternal.addListener(
    function(message, sender, sendResponse) { 
    if(sender.id !== extenstionOneId) return; 
    if(message.pdf) localStorage.setItem("pdf", message.pdf); 
    } 
); 

/* ... */ 

옵션 2 : chrome.storage. 2 개의 확장 사이에는 적용 할 수 없습니다.

+0

감사합니다. 내가 밖으로 시도해 보자. 나는 브라우저의 어느 곳에서나 자바 스크립트 로컬 저장소를 사용할 수 있다는 인상하에 있었다. 내 유일한 문제는 콘텐츠 스크립트에 있습니다. 콘텐츠 스크립트에서 chrome.runtime.sendmessage에 액세스 할 수 있습니까? –

+0

예, 'chrome.runtime.sendMessage'는 콘텐츠 스크립트가 호출 할 수있는 몇 가지 사항 중 하나입니다. 'localStorage'는 특정 컨텍스트에 대해 로컬입니다. 즉 호스트 이름 당 하나의'localStorage '를 사용합니다. 모두가 사용할 수있는 큰 상자가 아닙니다. – Xan

+0

생각해 보면 localStorage는 원하는대로 동작하지만 사이트는 동일한 키를 사용하여 다른 사이트 저장소를 덮어 쓸 수 있습니다. 불가능한. –

관련 문제