3

我在Chrome擴展程序中多次向同一頁面注入內容腳本時遇到了一些問題。Chrome擴展程序 - 每頁加載多次注入內容腳本

我從我的「background.html」頁面注入內容腳本,在標籤的變化:

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    chrome.tabs.getSelected(null,function(tab){ 
     // Do some stuff 
     chrome.tabs.executeScript(null, { code: code}, function(result){ 

...等

裏面的內容腳本,我有一些的console.log命令

問題是,當我加載一個單頁,我看到每個日誌顯示在控制檯2-4次。

我很清楚,這是因爲頁面內的iframe發生,至少我認爲......我的問題是爲什麼?

我在文檔中看到默認情況下應該將「all_frames」(清單中的內容腳本權限數組)設置爲「false」,導致內容腳本僅被注入到頁面的頂部框架,但是這根本就沒有發生!

爲什麼它被多次注入?我是否需要將「all_frames」設置爲false?

其次:

有沒有辦法判斷該擴展試圖注入的內容腳本是從內部「background.html」頁面中的iframe或頁面頂部?

我已經試過

if(window.top === window){ console.log('whatever'); } 

並發現它不工作時間的100%。即使當我有我的代碼塊的其餘部分(圍繞chrome.tabs.executeScript())的條件,我仍然看到內容腳本多次注入....

任何想法或建議將不勝感激! :)

+0

您不必使用'chrome.tabs.getSelected()',因爲'tab'對象有一個名爲'active'的屬性,可以讓您知道該選項卡當前是否被選中。 – 10basetom

回答

3

onUpdated每當選項卡的狀態發生變化時觸發。這包括當它是正在加載完成加載,它解釋了許多日誌語句。 每次事件觸發時,您都需要檢查更改內容(URL更改,加載等)。

+0

哇,我覺得笨! :)我實際上有一個'if(changeInfo.status ==「complete」){}'在我的代碼中有條件,但受影響的塊在它之外......這就是我在多個平臺上處理多個項目/ API在同一時間! :P謝謝! – delta9

相關問題