日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Chrome扩展程序是如何进行消息传递的

發布時間:2023/12/29 windows 37 coder
生活随笔 收集整理的這篇文章主要介紹了 Chrome扩展程序是如何进行消息传递的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是 dom 哥。這是我關于 Chrome 擴展開發的系列文章,感興趣的可以 點個小星星。

一個復雜的 Chrome 擴展程序通常由 content_scriptsbackgroundaction popupside paneloptions pagedevtools 等部分組成,這些部分所負責的功能各不相同,所處的運行環境各不相同,所能訪問的 chrome.* API 也各不相同,也因此經常需要通信告訴對方需要做什么。

下面是我畫的一張圖,簡單說明各部分關系:

這些花花綠綠的部分各自運行在不同的環境中,往往需要相互通信,Chrome 為我們提供了兩種通信方式:

  • 一種是一次性請求(one-time requests),一次只能發一條消息,類似于手機發短信,跟 HTTP 請求很像。
  • 一種是長期連接(long-lived connections),允許發送多條消息,類似于手機打電話,跟 Websocket 連接很像。

接下來就詳細說說這兩種通信方式。

一次性請求(one-time requests)

如果要向擴展程序的另一部分發送一條消息,有兩個 API 可供調用:

  • chrome.runtime.sendMessage(extensionId?, message)
  • chrome.tabs.sendMessage(tabId, message)

從函數簽名很容易看出來,一個是向擴展程序的各個部分發消息的,另一個是給某個瀏覽器的某個頁簽發消息的。

為什么設計兩個 API?這是因為 content_scripts 是一個很獨特的存在!

先說說瀏覽器的的工作原理。

瀏覽器的每個頁簽都是單獨的線程。每個頁簽運行在與其他頁簽或擴展相隔離的獨立線程中。如下圖所示

我們在每個頁簽中打開頁面。content_scripts 是一個很特殊的存在!作為被注入到頁面的腳本,它的生命周期跟隨頁面。而擴展程序的其他部分,都有自己的生命周期!如果你在各個部分查看它們的 location,就會發現,只有 content_scripts 的 origin 是頁面的 url 一樣,而其它部分的 location.origin 都是 chrome://your-extention-id

知道了 content_scripts 的特殊性后,那么這兩個 API 就很好理解了。

chrome.runtime.sendMessage() 是給擴展程序發消息的,它的第一個參數是一個可選的 extensionId,意味著不但可以給自身擴展程序發消息,還能給別的擴展程序發消息,它發送的消息可以被擴展的任一部分接收到,包括 backgroundaction popupside paneloptions pagedevtools 等等,除了 content_scripts!!!

那么想給 content_scripts 發送消息怎么辦呢???

chrome.tabs.sendMessage() 就是專門用來給 content_scripts 發消息的!值得注意的是,想要給 content_scripts 發消息需要指定 tabId,也就是需要指明給哪個頁簽下的頁面的 content_scripts 發消息。這個設計很好,因為每個頁簽的頁面都運行了一份 content_scripts,這就避免了無關的頁面接收到消息。

發送消息搞定啦,有方法發送就得有方法接收才行啊。

接收消息的方法只有一個 API:

chrome.runtime.onMessage.addListener(
  (message, sender, sendResponse) => boolean | undefined
)

在擴展程序的任意部分(包括 content_scripts)都是用這個接收消息。這很方便。

長期連接(long-lived connections)

長期鏈接的 API 和一次性消息的 API 是相互對應的。

要創建一個可重復使用的長期消息傳遞通道,有兩個 API 可以調用:

  • chrome.runtime.connect(extensionId?, connectInfo?): Port
  • chrome.tabs.connect(tabId, connectInfo?): Port

這兩個 API 的設計和一次性消息的一樣。

chrome.runtime.connect() 用于和擴展程序的任一部分建立消息通道,除了 content_scripts!!!

chrome.tabs.connect() 是專門用來和 content_scripts 建立消息通道噠!

chrome.{runtime,tabs}.connect() 返回的是一個 Port 對象。Port 就是被設計用來在擴展程序的不同部分之間進行雙向通信的一個接口。

覺得不錯可以 點個小星星 支持一下哦 ??

總結

以上是生活随笔為你收集整理的Chrome扩展程序是如何进行消息传递的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕亚洲在线 | 日韩一区二区三区不卡视频 | 五月婷婷综 | 在线免费福利视频 | jizz自拍| 爱爱小视频免费看 | 国产精品15p | 久久久久久福利 | 黄色大片毛片 | 91精品婷婷国产综合久久竹菊 | 女同在线观看 | 日本福利视频导航 | 国产伊人av | 亚洲精品成人久久 | 久久精品国产精品亚洲毛片 | 亚洲AV永久无码国产精品国产 | 波多野结衣1区 | 熟女俱乐部一区二区 | 亚州国产| 国产精品久久久久蜜臀 | 热久久网站 | 夏目彩春娇喘呻吟高潮迭起 | 日本高清视频网站 | 中国av毛片 | 巨乳动漫美女 | 97福利网| 国产一区二区三区久久久 | 亚洲黄业 | 性欧美一区二区 | 少妇高潮灌满白浆毛片免费看 | 林由奈在线观看 | 少妇高潮一区二区三区69 | 亚洲美女自拍视频 | 亚洲综合射 | 欧美人与动物xxxxx | 就去色av| 久久精品色妇熟妇丰满人妻 | 国产吞精囗交免费视频 | 日韩av网页 | 日噜 | 午夜久久久精品 | 日日摸日日添日日碰9学生露脸 | 欧美日韩亚洲天堂 | 黄网址在线 | 中文字幕在线观看日本 | 91美女在线| 关之琳三级全黄做爰在线观看 | 欧美成人精品一区二区三区在线观看 | 97av在线视频| 欧美系列第一页 | 91喷水| 艳妇臀荡乳欲伦交换gif | 天天做天天躁天天躁 | 欧美影院一区二区 | 九九热视 | 日韩美女性生活 | 麻豆av免费观看 | 成人av影视在线观看 | 日韩成人激情 | 国产精品麻豆成人av电影艾秋 | 午夜久久久久久噜噜噜噜 | 国产精品久久久爽爽爽麻豆色哟哟 | 在线色| 国产999| av福利在线 | 蜜桃av成人永久免费 | 少妇被粗大猛进进出出s小说 | 在线免费观看你懂的 | 69网站在线观看 | 亚洲欧洲自拍偷拍 | 狠狠躁日日躁夜夜躁 | 国产黄色在线 | 欧美专区在线视频 | 黄色小视频在线免费观看 | 亚洲一区二区三区三州 | 黄色片aaaa| 久久黄色影院 | 黑人巨大猛烈捣出白浆 | 久久亚洲国产成人精品性色 | 成人av播放| 中文一区二区在线 | 五月婷婷av | 丰满熟女人妻一区二区三 | 99久久人妻无码中文字幕系列 | 亚洲欧美综合一区 | 伊人一区二区三区 | 极品91| 黄色a级大片| 少妇精品无码一区二区 | 国产精品女优 | 日韩久草 | 欧美不卡在线观看 | 免费黄色的网站 | 男人午夜视频 | 午夜污污| 黄色免费在线播放 | 青青草成人免费在线视频 | 欧洲在线观看 | 韩国三级在线播放 |