如何在从父窗口创建的iframe的onload处理程序中获取对iframe的window对象的引用。
如何在从父窗口创建的iframe的onload处理程序中获取对iframe的window对象的引用。
在我贴出任何代码之前,先来看看情景:
- 我有一个使用JavaScript创建空iframe的HTML文档
- JavaScript创建一个函数,并将该函数的引用附加到iframe的document对象上(使用
doc.open()
获取document的引用) - 然后将该函数作为iframe的document的
onload
处理程序附加上(通过将写入iframe中)
现在让我为之困扰的是,在onload处理程序中,全局(window)和document对象在运行时与通过脚本节点添加的JavaScript运行的相同对象是不同的。
这是HTML内容:
<!doctype html>
这是test-vanishing-global.js
的内容:
console.log("name: " + window.name + "\n" + "window.vanishing_global: " + window.vanishing_global + "\ntypeof window.vanishing_global: " + typeof window.vanishing_global + "\ndocument.foobar: " + document.foobar);
操作步骤:
将这两个文件放入一个目录中,在浏览器中打开HTML文件(在最新的Chrome和Firefox中进行了测试,结果相同)。
这是我得到的输出:
this == document: false this == doc: true _doc == document: true _doc == doc: false name: foobar window.vanishing_global: 1366037771608 typeof window.vanishing_global: number document.foobar: barfoo:0.9013048021588475 name: window.vanishing_global: undefined typeof window.vanishing_global: undefined document.foobar: foobar:0.5015988759696484
处理程序内的this
对象应该是document对象。它是一个document对象,但不是与其所在的document相同的document对象(也不是与父文档相同)。处理程序内的window对象也与页面中加载的JavaScript中运行的window对象不同。
所以最后我的问题是:
有人知道发生了什么,我如何获取对实际window对象的引用,或者至少如何在相同的全局上下文中声明和引用全局变量?