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

标签 google-chrome-extension

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

我的扩展中有一些 .html 页面,让它成为“popup.html”。我将内容脚本注入(inject)到某个页面中,该脚本在新选项卡中打开一个“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);

在控制台中,我看到 Uncaught TypeError: Cannot call method 'foo' of undefined message。

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

是否有一种优雅而简单的方法可以将数据传递到这种窗口?我考虑过消息传递,但是如何使用背景页面有效地获取新打开的窗口的标签 ID?

提前非常感谢。

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

最佳答案

好的,我找到了两个解决我的问题的方法。

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

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

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

关于google-chrome-extension - 从内容脚本打开并将数据传递到弹出窗口(新选项卡),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340032/

相关文章:

javascript - 从 chrome 扩展中获取唯一的 ClientID?

javascript - 删除 captureVisibleTab 截取的屏幕截图

javascript - Manifest_version = 2 且无内联 javascript 的 NaCl 中的模块加载进度事件

google-chrome - 在 Chrome 扩展程序中生成下载文件的 md5/sha1/sha256 哈希

javascript - 如何在不打开新标签页的情况下在谷歌浏览器扩展程序中下载文件

javascript - 扩展程序在上传到 chrome 应用商店后不会在新选项卡中打开多个链接

html - 将元素从一个 DOM 移动到另一个 DOM

javascript - 检测 Youtube 搜索事件

javascript - 为 FF 重新设计 Chrome 的 POST

javascript - 将对象设置为 Chrome 存储