Javascript Chrome扩展中后台页面和弹出页面之间的通信

Javascript Chrome扩展中后台页面和弹出页面之间的通信,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我目前正在尝试为Google Chrome编写一个扩展,可以用来上传文件 有两个页面:背景页面和弹出页面。 单击omni栏右侧的图标时,将显示弹出页面。您可以使用标准HTML指定要上载的文件 选择文件并单击“上载”后,应将文件的名称(+路径)发送到后台页面。这是因为用户只需单击屏幕上的其他位置即可关闭弹出窗口,从而关闭页面 当弹出窗口处于活动状态且后台页面正在将文件上载到服务器时,弹出窗口还应从后台页面接收上载进度(0-100%),并显示此信息。完成后,用户应该会看到URL 问题是,我不知道如何

我目前正在尝试为Google Chrome编写一个扩展,可以用来上传文件

有两个页面:背景页面和弹出页面。 单击omni栏右侧的图标时,将显示弹出页面。您可以使用标准HTML
指定要上载的文件

选择文件并单击“上载”后,应将文件的名称(+路径)发送到后台页面。这是因为用户只需单击屏幕上的其他位置即可关闭弹出窗口,从而关闭页面

当弹出窗口处于活动状态且后台页面正在将文件上载到服务器时,弹出窗口还应从后台页面接收上载进度(0-100%),并显示此信息。完成后,用户应该会看到URL

问题是,我不知道如何在这两个页面之间进行通信。文档并不是很清楚这是如何工作的。我尝试过的一件事是在后台页面上创建一个名为
upload(filename)
的函数,并将此代码放入弹出页面:

var BGPage = chrome.extension.getBackgroundPage();
BGPage.upload(the_filename);
但它不起作用,函数没有被调用

有人知道我如何将文件名从弹出页面发送到背景页面,以及如何通过弹出页面从背景页面检索上载状态(最终是链接)吗


提前谢谢

将其定义为变量

background.js

upload = function(fileName) {
  console.log('Uploading', fileName);
}
var BGPage = chrome.extension.getBackgroundPage();
BGPage.upload(the_filename);
popup.html

<script src="popup.js"></script>
这应该行得通。如果没有,请检查您的检查器的弹出窗口和背景页面:

  • 弹出式检查器:右键单击弹出式检查器并选择“检查”
  • 后台检查器在扩展设置页面中chrome://extensions,打开开发者模式(选中右上角),然后单击background.js

它将打开inspector,然后单击console以查看控制台中的错误消息,以进一步帮助您,执行上面所述的操作应该有效,我一直都在执行。

您在清单中声明了后台页面吗?您确定没有调用后台函数吗?您是否检查了控制台中的错误?是的,我在清单中声明了后台页面;我确信后台函数没有被调用,因为我从以下行开始:alert(“It works!”);,try-catch返回“undefined”。您提供的代码不包含错误,因此它位于其他地方,您没有显示。请注意,在manifest v2中,您不能使用内联脚本,因此请将该代码放在popup.js中,并使用popup.html链接到它