【问题标题】:TypeError: Result of expression 'printWindow' [undefined] is not an objectTypeError:表达式'printWindow'[未定义]的结果不是对象
【发布时间】:2010-06-08 03:56:10
【问题描述】:

我正在尝试在我的页面中动态创建隐藏的 iframe 以加载 3 个其他页面,以便我可以获取所有 HTML 并将它们组合成 1 在新窗口中。

但是我坚持这一点。 框架创建得很好。 但是每当 javascript 运行到

的部分
 var printWindow="";
 function openNewWindow()
 {
     printWindow = window.open("","");
     printWindow.document.open();
     printWindow.document.write(HTMLfromFrames);
     printWindow.document.close(); 
 }

我收到此错误: TypeError: 表达式'printWindow' [undefined] 的结果不是对象。

但是如果我生成一个按钮来单独调用这个函数,它工作正常。 但是我需要它一键运行所有事件

有人知道怎么回事吗? 谢谢!

【问题讨论】:

  • 花括号的作用是什么 - {...},它应该是一个函数(不是)吗?所有浏览器都会发生同样的情况吗?
  • er 是的,它是一个函数。对不起,错字。我不确定我只在 Safari 上测试过

标签: javascript iframe object window dynamic


【解决方案1】:

在我看来,这是一个范围界定问题。您的 printWindow 对象的范围在 openNewWindow 返回时结束;换句话说,变量只存在于该函数内部,并在函数结束时消失。删除 var 以使变量全局可用(被认为是错误的形式)或在代码中的其他位置声明变量并确保它在执行时可用于 openNewWindow。

【讨论】:

  • openNewWindow() 将只运行通过事件 onClick 执行的所有函数中的最后一个。无论如何,我已经将它声明为一个全局变量,但它似乎仍然遇到同样的问题:S 我想知道为什么。
  • 如果您仍在该函数内重新声明变量,它将成为该函数的本地变量,并且不会知道外部函数或全局命名空间中的 printWindow。尝试删除var
  • 您可以在按钮中发布启动整个过程的代码吗?另外,你能确保它本身不在与上面的代码不同的框架内吗?
【解决方案2】:

哦,我解决了。我以某种方式声明为全局变量 然后在方法的前面声明 obj。 printWindow = window.open("",""); 仍然不确定为什么我在动态创建 iframe 后无法声明它。 感谢您的帮助!:D

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 2011-09-07
    • 2011-09-28
    • 2014-07-12
    • 2021-06-11
    • 2018-12-21
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多