[Chrome Extension] Message Passing API
keywords
runtime.sendMessage(<message>, callback<response>)
,tabs.sendMessage(<tabId>, <message>, callback<response>)
runtime.onMessage.addListener(callback<request, sender, sendResponse>)
,runtime.onMessageExternal.addListener(callback<request, sender, sendResponse>)
runtime.connect()
,runtime.onConnect.addListener(callback<port>)
- Message Passing @ Google Developer
- Message API Sandbox @ PJCHENder Github
⚠️ 重要觀念:區分 Content Script 和 Chrome Extension
Content Script 一般指的就是注入別人網頁的程式碼,但不完全是,因為我們可能會用 ContentScript 在別人的頁面中嵌入 iframe,而這個 iframe 的內容實際上是去抓取 chrome extension 內的檔案。因此要區分是 content script 和 chrome extension 最準確的方式是看執行該程式碼的位置是在別人頁面內(Content Script)還是 Chrome Extension 的檔案內(檔案是以 chrome-extension://
開頭的都算是包含在 Chrome Extension 內)。
之所以要區分是屬於 content script 或 chrome extension 的原因在於 Message API 傳送訊息的方式會有所不同。
特別留意:如果 ContentScript 是用來載入 iframe,且 iframe 的 src 是來自 chrome 套件內部(該檔案是以 "chrome-extension://" 開頭的都算),則這個 iframe 的內容一樣算是在 chrome extension 內,因此一樣可以接收到
chrome.runtime.sendMessage()
發送過來的訊息。