2014-06-21 2 views
6

Chrome 확장 프로그램을 구축 중입니다. 페이지가 변경 되더라도 탭에 대한 js 변수를 기억하는 방법이 있는지 궁금합니다. 예를 들면. example1.com에 있고 동일한 탭에서 example2.com으로 이동하면 example1.com에 설정된 변수를 유지해야합니다. Chrome 저장 용량을 사용하고 싶지 않습니다.크롬 확장 프로그램 : 페이지가 변경되는 경우에도 탭용 변수 저장

크롬은 다른 도메인에 대해 서로 다른 저장소를 가지고 있기 때문에 localStorage 또는 sessionStorage를 사용할 수 없습니다. 이것이 달성 될 수있는 방법은 무엇입니까?

+0

페이지 URL을 키로 사용하여 문자열로 묶은 JSON을 저장하는 쿠키를 사용하십시오. –

+0

@RoryMcCrossan example2.com에서 example1.com에 설정된 쿠키에 액세스 할 수 없다고 생각합니다. –

+0

** 크롬은 도메인마다 서로 다른 저장소를 보유합니다. 이 방법을 수행 할 수있는 방법은 무엇입니까? ** 대답은 아니오입니다. 확장 영역에 대한 로컬 저장소는 도메인에 관계없이 격리되어 있습니다. –

답변

0

localstorage를 사용하십시오. 확장 기능 및 변수 저장 페이지에서 완전히 분리됩니다. 백그라운드 페이지에서 localstorage를 사용해야하므로 탭을 변경하면 변수가 손실되지 않습니다.

+0

콘텐츠 스크립트를 사용하고 있습니다. 내 변수의 배경 페이지에 변수를 저장한다고 말하고 있습니까? 콘텐츠 스크립트가 확장 프로그램의 배경 페이지에 액세스 할 수 있습니까? –

4

(배경 페이지를 통해) localStorage를 사용하는 것 외에도 콘텐츠 스크립트에서 배경 페이지로 메시징하여 해당 변수를 배경 페이지에 직접 저장할 수 있습니다. 해당 변수가 확장 페이지 (다른 내용 또는 삽입 된 스크립트)에 있으면 chrome.extension.getBackgroundPage().window.variableYouWant 메소드를 사용하여 변수를 쉽게 저장하고 메시징을 통해 컨텐츠 스크립트 자체에서 해당 변수에 액세스 할 수 있습니다.
이 변수는 다음과 같이 배경 페이지에 해당 변수를 보낼 컨텐츠 스크립트 사용 메시징에있는 경우 :

chrome.runtime.sendMessage(object); 

object 당신이 보낼 수있는 개체 수 있습니다. 당신이 그 변수를 필요로 할 때

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { 
    myVariabeInBackground = message.yourObjectProperties; 
}); 

당신은 (내용 스크립트 이외의) 확장 페이지에서 chrome.extension.getBackgroundPage().window.myVariabeInBackground를 사용하거나 콘텐츠 스크립트에 배경 페이지에서 메시지를 보낼 수 있습니다 : 배경 페이지에

이 같은 lisner 가지고 배경 페이지에 자신을 chrome.tabs.sendMessage(tabId, messageObject)를 호출하여이 같은 청취자를함으로써 컨텐츠 스크립트에 나타납니다

chrome.runtime.onMessage.addListener(
    function(request, sender) {}); //request is your sent object. 

로컬 스토리지는 또한 당신은 당신의 C에 그 저장된 변수를 얻기 위해 같은 일을 할 수있는 경우 ontent 스크립트.
아니요, 콘텐츠 스크립트에서 백그라운드 페이지에 직접 액세스 할 수 없습니다.

추 신 : 확장이 다시로드되면 백그라운드 페이지의 변수가 재설정됩니다. 확장 프로그램을 다시로드 한 후에도 해당 변수를 사용하려면 로컬 저장소를 사용하십시오. 브라우저 동작에서 확장 프로그램이 다시로드되지 않습니다. 자세한 내용은

https://developer.chrome.com/extensions/messaging

0

당신은 localStorage + 메시징에 대한 대안으로 chrome.storage API로 보일 것입니다 읽어 보시기 바랍니다.

localStorage과 비교하면 비동기 적이지만 메시징도 있고 변수 저장만을위한 메시징은 많은 상용구로 연결됩니다.

here 및 최근 overview (나 옆에) 찬성/반대 의견을 참조하십시오.