2017-09-29 18 views
1

特定のドメインでポップアップを表示するChrome拡張機能を開発しています。 ユーザーがウェブページにアクセスするたびにポップアップを表示するか、対象となるドメインの1つで現在のページを更新する必要があります。ユーザーがページを更新したときに検出する

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); 

}} 

コードが非常にうまく実行され、ページがロードまたはリフレッシュされたことを検出すると、ポップアップを表示してユーザーが閉じると、リフレッシュイベントが発生し、ポップアップが再び表示されるという問題があります。私はクロムがDOMを再描画してページをリフレッシュするので、私は思う。 だから私はユーザーが彼自身がクロムがないときにページをリフレッシュするときを検出する方法を探しています。

答えて

0

私はそれを行うためのハックを見つけました。私はクロムネイティブのAPIを介してそれを行う方法はないと思う。その後、このメッセージをキャッチするために、バックグラウンドスクリプトの設定リスナー、

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

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); 
      } 
     } 
    }); 
を はこれまで、ユーザーがページを更新し、メッセージを送信するときに検出し、すべてのタブにコンテンツスクリプトを挿入します

とvoila!問題を解決しました:)

関連する問題