如何在从父窗口创建的iframe的onload处理程序中获取对iframe的window对象的引用。

13 浏览
0 Comments

如何在从父窗口创建的iframe的onload处理程序中获取对iframe的window对象的引用。

在我贴出任何代码之前,先来看看情景:

  1. 我有一个使用JavaScript创建空iframe的HTML文档
  2. JavaScript创建一个函数,并将该函数的引用附加到iframe的document对象上(使用doc.open()获取document的引用)
  3. 然后将该函数作为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对象的引用,或者至少如何在相同的全局上下文中声明和引用全局变量?

0