ABR*_*ABR 2 javascript google-chrome google-chrome-extension
我正在开发一个Chrome扩展程序,即将在我的后台页面和内容脚本之间实现一些消息传递,它将需要大约3条消息(内容 - >背景 - >内容 - >背景),这些消息都以同步顺序发生.
我不知道我应该使用什么消息传递API,因为我不太了解端口API和普通chrome.runtimeAPI 之间的区别.有什么我不能用runtime.sendmessage我可以做的事情Port.postMessage吗?任何可能让我选择一个而不是另一个的重大差异?
端口是可重用的双向连接.
单个消息遵循相同的方案,并不关心调用之间的状态:
sendMessage- > onMessage(可选 - >)sendResponse- >回调sendMessage
你可以通过该计划做任何事情.
Ports可能有三个方面让我觉得很有意思.
sendMessage是广播操作.
如果是runtime.sendMessage,它将被发送到作为扩展的一部分的所有活动页面.通常,只有一个人会听(背景页面),但每个人都会收到它.因此,如果你有一个弹出窗口或一个选项页面打开 - 每个人都会收到.您可以使用端口来保存一小部分资源,或隔离页面实例.
如果是tabs.sendMessage,它将默认发送到该选项卡中的所有帧.您可以指定一个frameId 如果您知道它,但假设您没有,并且您正在广播所有帧,然后确定哪个帧是正确的 - 您可以维护该帧的端口.
一个开放的端口使事件页面保持清醒状态.如果您正在执行可能会卸载事件页面的异步操作,这将非常有用.如果你真的不关心事件页面保持清醒,这也是一个缺点 - 它阻止了提供的改进
端口是一个"死亡警报":如果另一端的上下文不再存在(例如卸载了上下文脚本的页面),您将收到通知onDisconnect.
除非您需要以上任何一项,否则您可以采用更简单的方式sendMessage- onMessage沟通.
出于您的目的,它将sendMessage从内容脚本中调用两次(因为它启动连接)并从后台回复sendResponse.如果需要,不要忘记异步响应的细微差别.
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |