我正在打开一个弹出窗口,并希望在其中执行单击操作,从而在打开它的页面中执行一些 jQuery。我在网上找到的所有内容都表明我应该能够使用 window.opener 做到这一点(例如JQuery - 写入开启器窗口 https://stackoverflow.com/questions/1034903/jquery-write-to-opener-window)
但当我console.log
window.opener
,它只是“真实”,而不是真实的物体。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 似乎绑定到它创建的窗口对象。奇怪的事情发生了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)