Gre*_*reg 8 javascript google-chrome google-chrome-extension
在我的扩展程序中,我正在尝试确定是否将新选项卡创建为另一个选项卡的弹出窗口,如果是,则选择哪个选项卡.
我以为我可以使用内容脚本中的window.opener来帮助解决这个问题.但看起来window.opener在内容脚本中无法正常工作.
当我手动创建选项卡时,它的window.opener按预期为null.
当选项卡被另一个选项卡创建为弹出窗口时,其window.opener未定义.我可以从中推断出选项卡是作为弹出窗口创建的,但我无法用它来确定哪个选项卡创建了新选项卡.
这是一个已知的问题,有没有人知道任何变通方法?
ser*_*erg 17
我没有仔细研究这个问题,但我想我可以指出你正确的方向.内容脚本无法从父窗口访问变量,因为它是沙箱.解决方法是直接在页面上运行代码,为此,您需要将脚本注入脚本标记:
您的内容脚本如下所示:
function injectJs(link) {
var scr = document.createElement("script");
scr.type="text/javascript";
scr.src=link;
(document.head || document.body || document.documentElement).appendChild(scr);
}
injectJs(chrome.extension.getURL("inject.js"));
Run Code Online (Sandbox Code Playgroud)
现在,您可以在没有沙箱限制的情况下运行代码,就好像它在页面上一样:
inject.js:
alert(window.opener);
Run Code Online (Sandbox Code Playgroud)
我假设您现在希望将此信息传回背景页面,这是另一项挑战,因为您无法使用Chrome API.好消息是内容脚本可以访问DOM并监听DOM事件,因此您可以使用它们将信息传递到内容脚本,然后将其发送到后台页面.我很确定你应该能够注册一个自定义DOM事件并让你的内容脚本听它(我自己没有试过这个部分).
归档时间: |
|
查看次数: |
7876 次 |
最近记录: |