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



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

我的扩展中有一些.html页面,让它成为"弹出窗口.html"。我将内容脚本注入到某个页面中,该脚本在新选项卡中打开一个"弹出窗口.html",其中包含"var p = window.open(chrome.extension.getURL('/popup.html'),"popup")",效果很好。接下来,我需要将一些数据传递到此窗口,但我不知道如何以简单的方式执行此操作。

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

var p = window.open(chrome.extension.getURL('/popup.html'), "popup");
p.foo(data);

在控制台中,我看到未捕获的类型错误:无法调用未定义消息的方法"foo"。

我无法在查询字符串中传递数据,因为数据太大了。

有没有一种优雅而简单的方法将数据传递到这种窗口?我想过消息传递,但是如何使用背景页面有效地获取新打开的窗口的选项卡ID?

提前非常感谢。

上级:我试图反转逻辑并使用"window.opener.foo()"从父窗口获取数据,但在新打开的选项卡中window.opener返回null

好的,我找到了两种解决方案来解决我的问题。

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

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

如果有人有更好的解决方案,我也很乐意检查一下。

相关内容

最新更新