2013-07-30 79 views
5

Google Chrome瀏覽器擴展程序API使用chrome.devtools.inspectedWindow提供有關當前打開的窗口的信息,但它不提供更改時的事件。我可能會刷新或重定向頁面,我希望我要添加的DevTools面板得到通知。有沒有一種方法呢?chrome.devtools.inspectedWindow更改事件

想想元素面板,它始終保持與當前DOM最新。這可能很難實現,以便像DOM一樣保持最新狀態,每當發生DOM突變時,但至少在加載新頁面時通知我(至少在document.onload事件中,爲什麼不) )

關於如何實現這一點的任何想法,謝謝?

回答

10

每當更新發生時,收聽chrome.webNavigation事件和notify devtools事件之一。

另一種檢測被卸載頁面的方法是使用chrome.devtools.network.onNavigated事件(僅在devtools擴展頁面中可用)。

+0

好的,感謝給我帶領,這裏是我想要構建的更加狹義的解釋,也許你可以更多地指出正確的API方法,因爲背景,頁面和devtools腳本之間的消息可能會很棘手。我想基於來自使用某個JS框架的頁面的一些全局變量來顯示一些統計數據。所以我需要訪問我的devtools頁面中當前打開的頁面的運行時JS變量。這可能嗎?謝謝 – treznik

+1

是的,這是可能的。我建議添加一個按鈕,以便用戶可以手動觸發代碼(檢查全局變量)。我已經鏈接的API足以讓你開始。讓我知道你什麼時候卡住了。 –

+0

好的,我設法通過後臺腳本將chrome.webNavigation.onCompleted處理程序綁定到獨立的devtools面板。到目前爲止這麼好,但是我如何從https://developer.chrome.com/extensions/webNavigation.html#event-onCompleted的基本'details'參數中獲取該選項卡的全局變量?謝謝 – treznik

4

我遇到了同樣的挑戰,這是我在Google中發現的唯一結果,所以我想用我找到的解決方案回答。關鍵不在於chrome.devtools.inspectedWindow,而是在chrome.tabs.onUpdated。事實上,我發現chrome.tabs.*通常更有用。以下是我用來從我的擴展中查看狀態更改的代碼;

chrome.tabs.onUpdated.addListener(function (tabId, changes, tabObject) { 
    console.log("Status of", tabId, "is", changes.status); 
    if (changes.status == "complete") { 
    console.log("Tab Load Complete"); 
    } 
}); 

您也可以使用chrome.tabs.* API檢查狀態變化是否發生了當前標籤頁或不上。

+1

您不能在devtools頁面中使用chrome.tabs代碼,這是OP要求的地方。 我不會讓你失望,因爲看起來有些人明顯地發現你的解決方案很有用,但我懷疑他們是在試圖製作一個Devtools面板。 – WORMSS