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不尽快创建自己的答案,我会接受这个答案。很公平:)