0

我已經查看了這個問題/答案,以及: Communicating between Chrome DevTools and content script in extensionchrome.runtime.connect無法連接

看起來他們正在做的事情略有不同,我試圖做的,所以我不知道它適用多少。也許我絕對需要一個background.js文件?

我還審查了這個問題: extension using background, content and devtools together

這看起來他們使用的不是作爲記錄在這裏(這是我所需要的)長期連接: https://developer.chrome.com/extensions/messaging#connect

不管怎樣,前面的問題除了這裏是我的問題:

我已經嘗試了幾個小時的跨度幾個方法,所以我很確信我只是想在這裏做一些工作。

我的問題的關鍵是:

chrome.runtime.onConnect.addListener(function(){...}) 

這裏的聽衆將永遠不會觸發。

這裏是我的設置:

我的擴展使用一個內容腳本和DevTools頁。從這兩個地方,內容腳本和DevTools頁面,我都嘗試通過chrome.runtime啓用消息傳遞。我的樣板初始化看起來是這樣開始的連接:

console.log('initializing connection'); 
var port = chrome.runtime.connect({name: 'My Extension'}); 
console.log('port', port.name); 

這等待的onConnect:

chrome.runtime.onConnect.addListener(function(port){ 
    console.log('got connection!!!!!!'); 
}); 

我調用onConnect處理將永遠不會被調用。我嘗試將連接代碼(chrome.runtime.connect({...}))放入內容腳本和DevTools頁面JS中,同時將處理程序初始化置於相反的位置而無濟於事。

換句話說,如果我將連接代碼放在內容腳本中,我會將處理程序初始化放到DevTools頁面JS中。如果我將連接代碼放入DevTools頁面JS,我會將處理程序初始化放入內容腳本中。

在這兩種情況下,我都沒有收到運行時錯誤,但是,我也從來沒有看到console.log('got connection!!!!!!');被調用。是的,當我在DevTools頁面JS中擁有處理程序初始化時,我正在查看DevTools頁面控制檯。

我只是在誤解某些東西或缺少文檔中的某些東西。任何人都可以用正確的方向指出我的觀點:DevTools Page JS與內容腳本進行通信?

+0

有大量的bug在DevTools擴展消息。您應該嘗試將背景用作代理,並僅從DevTools啓動連接。 – Xan 2014-09-23 17:49:31

回答

0

根據Xan的評論,devtools擴展和內容腳本之間的通信應該通過使用後臺腳本完成。該過程基本上是:

  1. (devtools腳本) - 創建連接(併發送或通過連接端口打開監聽消息)

  2. (背景腳本) - 監聽要創建的連接,接收端口,並用它來收聽廣播消息

,如果你想保持長壽命連接這是有用的,所以基本上你需要一對夫婦的消息傳遞後退和前進單個處理。如果你想簡單的信息傳遞不時,但不需要傳遞多個消息回來,然後來回你可以實現一個更簡單的溝通:

  1. (devtools腳本) - 通過發送一個消息在chrome.runtime.sendMessage

  2. (背景腳本) - 監聽信息通過與其關聯的任何分機發送chrome.runtime.onMessage.addListener()