2017-05-03 32 views
0

我有一個chrome擴展,其背景頁面在manifest.json中配置爲persistent: falsechrome.tabs.query currentWindow在「非活動」背景頁面上不返回製表符

背景頁面實現以下鉻API方法:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    // tabs is empty 
}); 

如果背景頁變爲無效時,上述代碼被調用時,query方法返回在回調沒有突出部,在除去currentWindow過濾器返回凸片但不適用於所有窗口。使用lastFocusedWindow也不起作用。

有沒有辦法讓不活動的後臺頁面成功查詢當前窗口的活動選項卡。

+1

聽起來像一個錯誤,或者有可能是你的代碼中的其他東西,搞亂了結果。 – wOxxOm

回答

0

這是內存卸載的副作用。考慮使用chrome.runtime.getBackgroundPage,這將確保事件頁面在調用回調之前被完全加載。

從developer.chrome.com:

chrome.runtime.getBackgroundPage(function callback)

檢索JavaScript的 '窗口' 對象當前擴展程序/應用裏面的背景頁運行。如果後臺頁面是一個事件頁面,系統將確保它在調用回調之前被加載。如果沒有後臺頁面,則會設置錯誤。

+0

我嘗試在'chrome.runtime.getBackgroundPage'回調調用中包裝我的'chrome.tabs.query',但仍然沒有返回製表符。可能是'chrome.runtime.getBackgroundPage'必須在調用背景頁面上的函數之前調用,而不是在它自己內部? – jonathanwiesel

+0

@jonathanwiesel,不,這不是必需的。這個答案不相關,因爲你的代碼運行,只有結果不正確。就像我說的,你描述的行爲聽起來像是一個錯誤。 – wOxxOm

+0

@jonathanwiesel也許@ wOxxOm是正確的,但我會嘗試調試之前,這是一個錯誤。這聽起來像是Chrome實施的新版autodiscard功能的副作用。如果使用'chrome.windows.getAll'並將'populate'設置爲'true',那麼應該給你一個窗口對象數組,每個窗口對象都包含一個屬性及其後續選項卡。我會測試一下,看看你是否仍然收到不完整的結果。 – nburr