Google chrome extension 从内容脚本打开数据并将其传递到弹出窗口(新选项卡)

Google chrome extension 从内容脚本打开数据并将其传递到弹出窗口(新选项卡),google-chrome-extension,Google Chrome Extension,我正在写一个chrome扩展,有一个问题 我的扩展有一些.html页面,让它成为“popup.html”。我在某个页面中插入了一个内容脚本,该脚本在一个新选项卡中打开了一个“popup.html”,其中包含类似“var p=window.open(chrome.extension.getURL('/popup.html'),“popup”)”的内容,效果非常好。接下来,我需要向这个窗口传递一些数据,但我不知道如何用一种简单的方式来完成 由于某些原因,我无法从具有的内容脚本调用子窗口的函数 var

我正在写一个chrome扩展,有一个问题

我的扩展有一些.html页面,让它成为“popup.html”。我在某个页面中插入了一个内容脚本,该脚本在一个新选项卡中打开了一个“popup.html”,其中包含类似“var p=window.open(chrome.extension.getURL('/popup.html'),“popup”)”的内容,效果非常好。接下来,我需要向这个窗口传递一些数据,但我不知道如何用一种简单的方式来完成

由于某些原因,我无法从具有的内容脚本调用子窗口的函数

var p = window.open(chrome.extension.getURL('/popup.html'), "popup");
p.foo(data);
在控制台中,我看到UncaughtTypeError:无法调用未定义消息的方法“foo”

我不能在查询字符串中传递数据,因为数据太大了

是否有一种优雅而简单的方式将数据传递到此类窗口?我考虑过消息传递,但如何使用后台页面有效地获取新打开的窗口的选项卡ID

先谢谢你

UPD:
我试图用“window.opener.foo()”反转逻辑并从父窗口获取数据,但在新打开的选项卡
window.opener
返回
null
好的,我找到了两种解决问题的方法

1) 添加一个背景页面,打开一个带有
chrome.tabs.create()
的弹出窗口。然后从内容脚本向后台页面发送消息,后台页面通过
chrome.tabs.sendMessage()
将消息重新发送到相应的选项卡。它看起来有点难看,但很管用

2) 一个更好的,没有背景页。扩展(弹出)页面为长期连接创建侦听器。然后内容脚本向该连接发送一条消息。这里的一个问题是,没有在页面打开后立即创建侦听器,因此应该有一种机制让内容脚本等待加载弹出窗口。它可以是一个简单的
setTimeout
,也可以是通过相同的长期连接从弹出窗口发出的通知


如果有人有更好的解决方案,我也很乐意去看看。

我认为这个问题更正确的标题应该是“打开并将数据传递到新选项卡”
popup
是Chrome Extensions中的一个特定术语,它似乎不是您正在使用的。您的第一个解决方案似乎是公认的解决方案。看看这个答案: