【发布时间】:2017-07-28 11:10:24
【问题描述】:
我刚刚注意到选项卡 API 是 only available for the desktop 不适用于 Android。过去我曾使用此代码向我的内容脚本发送消息:
sendMsgToTabs(msg) {
return browser.tabs.query({}).then(tabs => {
let msgPromises = []
for (let tab of tabs) {
let msgPromise = browser.tabs.sendMessage(tab.id, msg)
msgPromises.push(msgPromise)
}
return Promise.all(msgPromises)
})
}
但是当标签 API 不可用时,我应该怎么做呢?
我的意思是我能想到的唯一一件事就是不断地从内容脚本向后台脚本发送空消息,并且每当后台脚本有新信息时,它就可以对这些消息之一发送直接响应。但这听起来非常低效。一定有更好的办法吧?
【问题讨论】:
-
您可以在内容脚本中使用
browser.runtime.connect,在后台脚本中使用browser.runtime.onConnect,在页面和后台页面之间打开一个通道。将端口存储在列表中,并在port.onDisconnect事件触发时将其从列表中删除。
标签: android google-chrome-extension firefox-addon-webextensions firefox-android