2012-06-20 4 views
0

크롬 확장 프로그램에서 각 탭과 함께 저장하려고하는 탭 속성을 만들었습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 localStorage를 사용하는 방법을 살펴 보았지만 더 쉬운 방법이있을 것 같다. 데이터는 결코 영구적 인 것이 아니며 탭이있는 한 존재합니다.Chrome 확장 프로그램은 각 탭에 속성을 첨부합니다.

+1

"배열"을 만들면 키가 탭 ID이고 내용이 원하는 것입니다. –

+0

그래, 실제로 작동 할 것입니다. 아마도 배열이 많은 탭과 함께 풍선하지 않도록 정리 된 탭에 정리 스크립트가 있어야합니다. – nathancahill

답변

4

localStorage을 사용할 필요가 없습니다. "데이터는 결코 영구적 인 것이 아닙니다"라는 개념이 없으면 탭 ID는 세션 내에서 고유합니다. 이 사실로부터, 데이터는 비 영구적이라는 것을 알 수 있습니다. 업데이트 탭 해시 (/ 추가) (URL -

Tab 객체가 비싸지 않다 해시 항목을 제거 : 모든 속성은 원시적 s (불린, 숫자, 문자열).

예를 들어

(배경 페이지 만) : 롭 W의 대답에

var tabStore = {};   // <-- Collection of tabs 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    tabStore[tabId] = tab; 
}); 
chrome.tabs.onRemoved.addListener(function(tabId) { 
    delete tabStore[tabId]; 
}); 
+0

어제 나 혼자서이 작업을 하려다가 로컬 스토리지로 어지러운 하루를 보낸 후에도 똑같은 결론에 도달했습니다. 다행히 나는 마침내 올바른 곳에서 끝났다는 것을 알았습니다! 감사합니다 :) –

+0

각 "페이지 수명주기", onUpdated 두 번 ('changeInfo.status' :로드, 완료) 발사된다는 점에 유의하십시오. 따라서 페이지 변경 이벤트에서 한 번만 작동하려면 'if (changeInfo.status! ='loading ') {/*... 원하는대로 수행하십시오. * /}'와 같이 해당 이벤트 중 하나를 무시하십시오. –

+0

고맙게도 나를 위해 (OP는 말할 수 없다) 나는 onUpdated 이벤트가 필요하지 않지만 좋은 정보는 :) –

1

중요 칙.

tabs.onReplaced도 수신 확인하고 그에 따라 tabStore를 업데이트하십시오.

chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId) { 
    tabStore[addedTabId] = tabStore[removedTabId]; 
    delete tabStore[removedTabId]; 
}); 

크롬은 경고 또는 표지판없이 후드 아래 탭의 ID를 변경할 수 있습니다. 내가 아는 한, 검색 주소창에 검색어를 입력 할 때 구글이 "즉석 검색"을하는 유일한 곳입니다. 그것은 가장자리 사건일지도 모르지만, 이것을 추적하지 않으면 매우 교활한 문제가 될 수 있습니다.

관련 문제