2017-09-29 1 views
1

특정 도메인에서 팝업을 표시하는 Chrome 확장 프로그램을 개발 중입니다. 사용자가 웹 페이지를 방문하거나 타겟팅 된 도메인 중 하나를 사용하여 현재 페이지를 새로 고침 할 때마다 팝업이 표시되어야합니다.사용자가 페이지를 새로 고침 할 때 감지합니다.

onTabUpdate 함수는 페이지가로드 될 때마다 실행 얻을
chrome.runtime.onInstalled.addListener(function() { 
    chrome.tabs.onUpdated.addListener(onTabUpdate); 
}); 

(내가 도메인 테스트와 같은 불필요한 코드를 삭제 한) : 현재 탭이 업데이트 될 때 그래서 처음 난 리스너를 퍼트 한

function onTabUpdate(tabId, info, tab) { 
//if page is refreshed 
if (info.url === undefined) { 
    if (info.status == 'loading') { 
     console.log('Refresh happened for tab: ' + tabId) 
     tabsLoaded = {}; 
     loadPopup(tabId); 
    } 
} 
//if page is first time loaded 
if (tab.status !== 'complete') { 
    return; 
} else { 
    console.log("page loaded "); 
    loadPopup(tabId); 

}} 

코드가 잘 실행되고 페이지가로드되거나 새로 고쳐질 때 감지합니다. 문제는 팝업을 표시하고 사용자가 닫을 때 새로 고침 이벤트가 트리거되고 팝업이 다시 표시된다는 것입니다. Chrome은 DOM을 다시 그리며 페이지를 새로 고침하기 때문에 생각합니다. 그래서 나는 사용자가 자신을 크롬이 아닌 페이지를 새로 고침 할 때 감지하는 방법을 찾고 있습니다.

답변

0

해킹을 발견했습니다. 크롬 네이티브 API를 통해이를 수행 할 방법이 없다고 생각합니다.

chrome.runtime.onMessage.addListener(function (e, sender) { 
     if (e == "pageRefreshed") { 
      var hostName = extractHostname(sender.tab.url); 
      if (partnersList.some(function (el) { 
        return hostName.indexOf(el) !== -1; 
       })) { 
       loadPopup(sender.tab.id); 
      } 
     } 
    }); 
: 배경 스크립트에서 설정을 한 후 리스너를

if (performance.navigation.type == 1) { 
    chrome.runtime.sendMessage("your_extension_id", "pageRefreshed"); 
} 

,이 메시지를 잡으려고 : 사용자가 페이지를 새로 고침 및 메시지를 보낼 어느 때를 감지 모든 탭에 콘텐츠 스크립트를 삽입

및 voila! 문제가 해결됨 :

관련 문제