iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Modern Web

你知道這是什麼嗎? Chrome Extension MV3 With Vite系列 第 15

你知道這是什麼嗎? Chrome extension MV3 With Vite - Day 15 Message Passing跨Extension間的傳遞 (下)

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20220915/2013963605fPWcOmNy.jpg
Hi Dai Gei Ho~ 我是Winnie ~

如果說 昨日的內容是學會內部溝通,那麼在今天文章中,我們要來學習與外界溝通,所以在此篇文章中我們要繼續延續上篇內容, 將剩下的內容補充完,主要會探討跨 Extension 間溝通傳遞的方法。

不管是 一次性請求 還是 長時間請求,在與外部 Extension 進行資料的相互傳遞,其實使用方式都大同小異,因為他們傳遞方式同樣 都是 使用 chrome.runtime.sendMessage()port.postMessage()方法來進行傳遞。

更多 chrome.runtime.sendMessage()port.postMessage() 使用詳見上篇文章。

唯一不同的地方在於 監聽訊息接收的方法傳遞對象的指定

onMessageExternal 跨 Extension 間的溝通

一次性傳遞:

發送方式: 透過chrome.runtime.sendMessage傳送訊息時,需第一個參數指定傳送對象的 Extension ID。

let extensionId = ....

chrome.runtime.sendMessage( extensionId  ,{msg: 'Hi i am Extension 1'})

接收方式:

chrome.runtime.onMessageExternal.addListener(
  (request, sender, sendResponse)=>{});

與 內部Extension 監聽方式的不同, 我們需要透過 chrome.runtime.onMessageExternal.addListener()方法來接收外部傳遞的訊息。

長時間連結 :

發送方式:

同樣需透過chrome.runtime.connect()

let port = chrome.runtime.connect(laserExtensionId);
port.postMessage(...);

接收方式:

寫法與原本的一樣,只是改成chrome.runtime.onConnectExternal.addListener事件監聽方法來接收外部傳遞的訊息。

chrome.runtime.onConnectExternal.addListener((port)=>{
  port.onMessage.addListener((msg)=>{
   
  });
});

以下為範例:

在這邊需要提醒下大家,今天實作了一整天 才發現 跨 Extension 傳遞訊息,接收端只能是 運行於 Extension 端的Cotext,如: Background、popup 等,而在 Content Script 這不能以接收訊息的來監聽,只能以發送端來傳遞訊息 給 其他 Context,

這是為什麼呢?

透過實作結果與各方解答,歸納出了以下原因:

事情是這樣的,昨天我們有介紹到如果要傳遞訊息給 ContentScript ,需特定的 Tab ID 才能傳遞訊息到特定頁面,但跨 Extension 間傳遞 是兩個獨立執行環境,無法向內部環境一樣可以知道對方 CotentScript 當前所在的頁籤ID,而這也就表示當不知道對方所在位置,訊息無法傳遞到指定的頁面,進而導致chrome.runtime.onMessageExternalchrome.runtime.onConnectExternal監聽器不能使用的問題。

以上就是關於 跨 Extension 間的 訊息傳遞 應用補充,

關於實作範例檔,說來慚愧,
由於當前實作程式檔有點雜都還沒整理好,有點抱歉,後續會統整再一起放上來。

那今天文章先到這邊了,謝謝願意花時間看此篇文章的你,如果文章有錯誤的地方,再麻煩不吝嗇的給予指教,感謝!!

今日有感而發:

有一句話一直記在心裡『心裡不要想著距離,距離就不在你的想像以內。』

明天是9/16,所以想推薦 地球上最浪漫的一首歌


上一篇
# 你知道這是什麼嗎? Chrome extension MV3 With Vite - Day 14 資料的傳遞 Message Passing (上)
下一篇
你知道這是什麼嗎? Chrome extension MV3 With Vite - Day 16 Storage 資料存取
系列文
你知道這是什麼嗎? Chrome Extension MV3 With Vite30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言