gpt4 book ai didi

javascript - window.opener 不对

转载 作者:行者123 更新时间:2023-12-01 01:28:51 27 4
gpt4 key购买 nike

我正在打开一个弹出窗口,并希望在其中执行单击操作,从而在打开它的页面中执行一些 jQuery。我在网上找到的所有内容都表明我应该能够使用 window.opener 做到这一点(例如 JQuery - Write to opener window )

但是当我console.log window.opener时,它只是“true”,而不是真实的对象。 window.opener.jQuery 未定义,window.opener.$ 和 'window.opener.document' 也是如此。

这是窗口打开代码:

window.open('http://google.com' , "moderatorWindow", 'width=300, height=300');

这是在 Safari 中。其他页面能够启动弹出窗口,当我检查这些页面上的 window.opener 时,我得到了一个真实的对象。我做错了什么?

最佳答案

由于同域策略规则,您的变量为 true,而不是对象。就像 iframe 一样,如果您打开的弹出窗口不在同一域或子域中,那么在您创建它后它就会丢失。如果我可以说,在我的网站上打开一个(隐藏的)iframe 到 gmail.com 并且能够读取您的电子邮件,那么网络将是一个非常不安全的地方。

即使弹出窗口位于子域上,您也必须做额外的工作并将两个窗口的 document.domain 值设置为根域(例如 mydomain.com)。这是为了确保弹出的网站希望为其父网站所知(再次考虑安全性,如果我的 coke.ning.com 社区可以向您的 pepsi.ning.com 打开一个隐藏的 iframe,并在登录等)

为了证明我的观点,请尝试实际访问 google.com 并打开 Firebug(如果您使用的是 Safari 或 Chrome,则打开 Inspector)并执行以下操作:

var bob = window.open('http://google.com' , "moderatorWindow", 'width=300, height=300');
bob.window.location.href; // returns "http://www.google.com/"

最后,您可以随意在子页面上调用 jQuery 来修改同一页面上的元素,反之亦然,但您不能从一个页面使用 jQuery 来修改另一页面的 dom。几年前我尝试过这样做,试图节省一些加载时间,但除非有什么改变,否则它不起作用。 jQuery 似乎绑定(bind)到它创建的窗口对象。奇怪的事情发生了。

关于javascript - window.opener 不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5813396/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com