2016-06-18 94 views
0

我正在用dev面板寫一個devtools Chrome擴展。 devtools腳本可以使用chrome.devtools.inspectedWindow.reload重新加載頁面並在其他腳本運行之前運行腳本(在檢查的窗口的每個框架中)。但是,注入的腳本不再運行用於後續頁面重新加載和新創建的框架。Devtools鉻擴展:在每個幀/頁面加載開始時運行腳本?

如何將腳本插入在檢查窗口中每次後續頁面加載開始時運行的檢查窗口?

我知道我可以使用運行在document_startcontent script,但是它會在每次頁面加載開始時運行腳本,無論開發面板是否打開 - 腳本密集,所以我想避免在不需要時運行腳本。

devtools腳本能否以某種方式偵聽被檢查窗口中頁面加載的開始並通過在頁面上下文中運行腳本來響應?

回答

1

如上所述,您可以使用一種避免在不需要腳本時運行的選項,如programmatic injection。正如所討論的:

當您的JavaScript或CSS代碼不應該被注入與模式匹配的每一個頁面時,插入代碼到頁面中是非常有用的 - 例如,如果您希望腳本只在用戶單擊瀏覽器操作的圖標。

把代碼插入到頁面中,您必須具備以下條件:

  1. 您的分機必須具有頁面跨域權限
  2. 它也必須能夠使用chrome.tabs模塊。
    • 您可以使用清單文件的權限字段獲得這兩種權限。
  3. 設置好權限後,可以通過調用tabs.executeScript將JavaScript注入頁面。

如也在chrome.devtools.inspectedWindow在檢查窗口執行代碼所討論的,使用方法tabs.executeScript除非需要的特定功能,該eval方法提供。

然而,在Communicating Between Extension Components,請注意:

的DevTools頁不能直接調用tabs.executeScript。要從DevTools頁面注入內容腳本,您必須使用inspectedWindow.tabId屬性檢索檢查的窗口標籤的ID,並向後臺頁面發送消息。在後臺頁面中,撥打tabs.executeScript注入腳本。

您可能會瀏覽給定的文檔以獲取更多信息和示例。

+0

謝謝!具有'document_start''runAt'的'tabs.executeScript'工程! –

相關問題