2016-08-01 30 views
0

我正嘗試與使用消息傳遞切換到的標籤頁的內容腳本進行通信。這是我在background.js腳本中的代碼。OnActivated僅在新標籤頁打開時才起作用

chrome.tabs.onActivated.addListener(function(activeInfo) { 
    chrome.tabs.sendMessage(activeInfo.tabId, { greeting: "hello" }, function(response) { 
     console.log(response.farewell); 
    }); 
}); 

這裏是我在我的內容腳本代碼:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    sendResponse({ farewell: "goodbye" }); 
    loadContent(); 
}); 

是內容腳本不再處於非活動選項卡監聽,即使它切換回該選項卡?爲什麼這隻能在新打開的選項卡中運行?

爲了進一步闡明我爲什麼要這樣做,有時候標籤打開時沒有重新加載,我的腳本已經被執行。當與腳本有關的信息使用彈出選項進行更改時,我希望內容在換頁時重新加載,並且在不重新加載頁面的情況下再次運行特定功能。因此,注入內容腳本並不理想,因爲它已經被執行。

+2

至於「它切換回該選項卡」,在該選項卡之前注入的內容腳本?我的意思是在你加載擴展之後,你有沒有重新加載之前打開的標籤以確保你的內容腳本被注入? –

+0

您有一個有效的觀點。哈。我回到與舊版本的內容腳本標籤。我無法相信這是解決方案。謝謝。除了可能的魔法之外,你是如何得出結論的? – RandomPleb

+0

請參閱[這裏](http://stackoverflow.com/documentation/google-chrome-extension/2850/content-scripts#t=201608010722142170944),這是一個經常被問到的問題,Xan在文檔中提到了這個技巧。 –

回答

0

試試這個:

background.js

 chrome.tabs.onActivated.addListener(function(activeInfo) { 

      chrome.tabs.query({ 
       active: true, 
       currentWindow: true 
      }, function(tabs) { 

       chrome.tabs.sendMessage(activeInfo.tabId, 
        { greeting: "hello" }, function(response) { 
        console.log(response.farewell); 
       }); 
      }); 

     }); 
相關問題