Javascript 在background.js和event.js之间发送消息

Javascript 在background.js和event.js之间发送消息,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我试图让我的background.js从我的event.js接收信息(它们都作为后台脚本运行),或者至少允许background.js使用event.js的函数 我为什么要这样做: 我已经设置了代码,以便background.js处理主要任务 我的内容脚本需要不时从chrome.storage保存信息,因此它们需要向后台页面发送消息 为了保持代码的条理性,我创建了另一个名为event.js的后台页面,其中包含chrome.runtime.onMessagelistener以及用于执行来自内容脚

我试图让我的
background.js
从我的
event.js
接收信息(它们都作为后台脚本运行),或者至少允许
background.js
使用
event.js
的函数


我为什么要这样做:

我已经设置了代码,以便
background.js
处理主要任务

我的
内容脚本
需要不时从
chrome.storage
保存信息,因此它们需要向后台页面发送消息

为了保持代码的条理性,我创建了另一个名为
event.js
的后台页面,其中包含
chrome.runtime.onMessage
listener以及用于执行来自内容脚本的请求任务的所有函数

然后我意识到
background.js
也需要执行一些相同的功能,因此为了不重复代码,我使用
background.js
使用
chrome.runtime.sendmages
event.js

预期结果是
event.js
background.js
的通信与
内容脚本的通信一样成功

实际结果是
event.js
从未从
background.js
接收任何消息


我已经阅读了背景页上的文档和试图找到答案或提示的消息传递

这两个页面无法通过messagePassing进行通信有什么原因吗?
如果是这样,如何在这两个页面之间成功地传递信息或函数?

如果在清单文件的同一列表中定义了所有后台脚本,则将看到定义的所有内容

因此,如果您以“正确的顺序”将它们添加到清单中,最后一个脚本将看到前面脚本中的所有
var
s和
function
s

如果您在
background.js
event.js
中使用相同的函数,那么您可以创建一个
background\u funcs.js
来定义所有常用函数,并将其作为清单中的第一个函数


这样,其他人将看到其中定义的所有内容

只有一个后台页面,因此所有后台脚本都在该页面内运行。您可以在后台页面的devtools中看到它。它们都在相同的全局上下文中运行并共享相同的DOM。您不需要在页面内发送消息来传递数据。API不允许您这样做。只要直接或通过
require
调用您的函数就可以了。@wOxxOm哦,我明白了!但是现在,当我尝试从
background.js
调用
event.js
函数时,它表示该函数没有定义,似乎它正在尝试在加载
event.js
之前调用它。很好,现在您有一些工作要做。在后台页面使用devools设置断点并检查变量等。您可以按F5或运行
location.reload()
快速重新加载后台页面,这样它将触发您设置的断点,您将看到加载时发生的情况。另请参见-您可以看到,这些脚本是标准DOM脚本,按照指定顺序顺序运行,就像使用标准
@wOxxOm加载的任何其他页面脚本一样。太好了,谢谢。完全明白了。我只是在清单中首先列出event.js,以确保它首先加载。如果你能把你的评论复制成一个答案,那么我就可以投票并接受它。(顺便说一句,我注意到你经常在评论中回答,许多chrome扩展问题的答案都是0)有了关于
background\u funcs.js
的建议,我已经能够极大地改进我的背景脚本的组织。如果WOxxOm不尽快创建自己的答案,我会接受这个答案。很公平:)