我遇到一个奇怪的情况,一个内容页面似乎阻碍了其他所有内容的后台脚本通信。
这很奇怪,因为我可以看到调用通过DevTools中的后台脚本进行,但是当我打开主要内容页面的副本 chrome-extensions://xxx/index.html >期望chrome.runtime.sendMessage产生结果的所有其他页面都没有得到。
我不确定是否与此处的警告有关:
注意:如果多个页面正在监听onMessage事件,则仅 首先为特定事件调用sendResponse()将成功 发送响应。该事件的所有其他响应将是 忽略。
说实话,我觉得该案文有点含糊。我认为这意味着在处理程序中,sendResponse()
只能被调用一次,但这不是这里发生的事情,因为内容sendMessage()
是一个单独的页面/进程。
然后,它再次声明“多页”,是否意味着一次只能使用一页browser.runtime.onMessage.addListener()
?
我很困惑。
如果我关闭任何主要内容页面(构建最复杂的内容页面),并打开一些更简单的内容页面(在加载时仅对后台脚本进行一次调用),则更简单的内容页面(不包含)听众)都可以。
当我打开主内容页面(使用监听器)时,较简单的页面将不再起作用,如果我打开两个主内容页面,则两个页面(使用监听器)都将无效。< / p>
我的消息发送包装在一个帮助程序库中,该程序库用于序列化和处理传递的消息中的错误,此外,我正在使用Web Extensions Polyfill为我提供更好的基于Promise的API,但该方法一直在使用过去两个月里我扔给它的所有东西,这个应用程序都很复杂。
我正在使用一次性发送消息格式:
browser.runtime.sendMessage(id || null, payload).then( ... )
下一步是查看长期连接。
我确定这一定是其他人遇到的问题。
有人有类似的东西吗?
干杯, 戴夫