chrome extension 与网页、服务器交互的思考

目前插件与网页的交互方式有

Content Script 通信:(外部网页)

将插件JS 注入网页中监听网页的行为

目前采用的是插件JS 注入网页监听网页的postmessage 消息,网页的JS主动发送postmessage 消息

Window.postMessage():(插件内部网页)

当网页是在Chrome Web扩展的弹出式页面(Popup)或者选项页面(Options)中打开时,可以使用window.postMessage()方法进行跨域通信

使用后台轮询:(插件打开的网页)

如果网页和插件之间无法直接通信,你可以在插件的Background Script中定期轮询网页的状态。例如,可以使用chrome.tabs.executeScript()函数注入脚本到网页中,原理与content script一致,但是更加麻烦,资源消耗更大

插件与服务器的通讯方式有:

长轮询(占用服务器资源)

在长轮询中,插件的 Background Script 向服务器发送一个长时间的 HTTP 请求,服务器一直保持连接打开,直到有新数据或通知时才响应请求。然后,插件收到响应后,再立即发起下一个长轮询请求,以保持持续的连接。

长连接(占用服务器资源)
websocket

双向长连接,能够实现插件向服务器推送消息,服务器向插件推送消息,但是连接过多会对服务器造成较大压力

Server-Sent Events (SSE)

基于长连接,单向通讯,即服务器向插件推送消息,管理比较轻量级

SSE 的工作原理如下:

客户端(浏览器)通过向服务器发送一个普通的 HTTP 请求,请求的头部包含 Accept: text/event-stream,告诉服务器希望接收 SSE 事件流。

服务器接收到 SSE 请求后,会将连接保持打开,并在需要的时候向客户端发送事件流(Event Stream)。

服务器发送的事件流使用简单的纯文本格式,每个事件以 data: 开头,后跟具体的数据内容。事件之间使用一个空行分隔。

客户端收到服务器发送的事件流后,可以通过监听 message 事件来处理每个事件的数据。

当服务器没有新的事件发送时,连接会保持打开,客户端仍然处于接收事件的状态。

SSE 的特点和优势:

实时性:SSE 允许服务器主动向客户端推送数据,使得客户端可以实时接收更新,无需轮询服务器。

简单易用:相比于 WebSocket,SSE 使用简单的纯文本格式,实现起来更加直观和易于理解。

高兼容性:大部分现代浏览器都支持 SSE,即使在不支持 SSE 的浏览器中,也会作为普通的 HTTP 请求处理。

轻量级:SSE 是一种轻量级的实时通信技术,适用于低频率和简单的实时通信场景。

需要注意的是,由于 SSE 是单向通信,即服务器向客户端发送消息,客户端不能主动向服务器发送消息,因此适用于一些只需要服务器向客户端推送数据的场景。如果需要客户端和服务器之间的双向通信,WebSocket 可能是更适合的选择。

推送(不占用自己服务器资源,直接使用google 的服务)

实际的工作原理是通过google 自己的服务向插件推送消息,基本流程是服务器向Google 的FCM推送消息,FCM再向插件推送消息,插件接收到消息后去处理。

(具体能不能做到,怎么做还需要调研,能确定的是要申请google 的FCM ,插件需要增加GCM的权限)

FCM 消息简介  |  Firebase Cloud Messaging (google.cn)

chrome.gcm - Chrome 开发者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值