2012-12-19 2 views
2

tabid를 사용하여이 작업을 수행 할 생각 이었지만 탭 내에서 탐색 할 때 꽤 자주 변경되는 것 같습니다. API reference은 tabid가 "브라우저 세션"내에서 고유하다는 점에 유의합니다. 나는 이것을 브라우저 프로세스의 수명 내에서 의미있게 생각했지만, 이제는 특정 웹 사이트와의 세션에서만 유일성이 보장 될 가능성이 높아졌습니다. 탭 전체를 고유하게 식별 할 수있는 또 다른 방법이 있습니까?탭 수명 동안 탭을 고유하게 식별하는 방법이 있습니까?

+0

이전에 질문을했지만 아무도 아직 답변을 찾지 못했습니다. http://stackoverflow.com/questions/12658370/re-establishing-tab-identity-in-a-chrome-extension-after -Browser-restart –

+0

@KonradDzwinel, 당신이 링크 한 질문은 OP의 질문과 같지 않습니다. 이 질문은 하나의 borwser 세션 내에서 tabID ID에 관한 것이지만, 연결된 질문은 세션간에 ID를 보존하는 것과 관련됩니다. 이 질문에 대해서는 대부분의 경우 'Chrome_RenderWidgetHostHWND' 핸들이 다른 사이트간에 이동 한 후에도 탐색 중에 동일하게 유지됩니다. 따라서이 핸들로 탭을 추적하는 NPAPI 플러그인을 만들 수 있습니다. – Stan

답변

1

사전 렌더링 및 기타 요인으로 인해 탭을 '교체'할 수 있습니다. 즉, 탭을 열린 상태로 유지하더라도 tabId가 변경 될 수 있습니다. chrome.webNavigation.onTabReplaced은 이러한 이벤트를 캡처하는 데 사용할 수 있습니다. 자세한 내용은 https://developer.chrome.com/extensions/webNavigation.html#event-onTabReplaced을 참조하십시오.

다음 단계에 따라이 문제를 설명하기 위해 수도 도움 :

  1. 것은 당신이 "탭"과 확장을위한 "webNavigation"요청을 요청했고 확장이 비를 사용하지 않는 것을 확인하십시오 영구 배경 페이지 (manifest.json에서 background.persistent = true가 없음). 또한 Google이 기본 검색 엔진이고 빠른 검색이 사용 설정되어 있는지 확인하십시오.
  2. Google 검색이 아닌 일부 웹 사이트를 엽니 다.
  3. 확장 프로그램의 배경 페이지에있는 개발자 도구에서 chrome.tabs.query({}, function(tabs){console.log(tabs)})을 실행하십시오. 기존 탭과 해당 ID를 확인하십시오.
  4. DevTools에서 chrome.webNavigation.onTabReplaced.addListener(function(details){console.log(details);을 실행하십시오.
  5. 해당 탭의 검색 주소창에 무언가를 입력하여 Google 순간 검색을 실행하고 페이지 본문을 클릭하십시오. DevTools 콘솔에서 onTabReplaced 이벤트가 시작되고 이전 탭과 새 탭 ID가 표시되어야합니다.
  6. chrome.tabs.query({}, function(tabs){console.log(tabs)})을 다시 실행하면 해당 탭 ID가 실제로 '변경'되었음을 알 수 있습니다.
+0

실제로 탭 ID는 탭의 상수로 취급 될 수 있습니다. 당신이 말하는 임시 ID는'chrome.tabs' API에 노출되지 않습니다 - https://developer.chrome.com/extensions/webNavigation.html#tab_ids를보십시오. –

+0

@RobW "일단 이러한 탭을 스왑하면 onTabReplaced 이벤트가 시작되고 이러한 API를 통해 액세스 할 수있게됩니다." 필자의 이해를 돕기 위해 기존 탭의 탭 ID를 '변경'할 수 있습니다. 그러나 나는 그 순간의 사건을 재현 할 수 없었다. –

관련 문제