JavaScript nullpointer exception:为什么我动态创建的iFrame的contentWindow和contentDocument总是为null?

时间:2013-01-29 18:17:50

标签: javascript html iframe

我使用jQueryMobile创建了一个单页网站。

“单页”表示整个网站只包含一个index.html文件,而不同的内容通过锚点显示,例如

  • 的index.html#起动
  • 的index.html#接触
  • 的index.html#公司简介
  • 等......

我通过JavaScript创建了一个iFrame:

var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

在第2行,我得到一个例外情况:

  

未捕获的TypeError:无法读取null

的属性'document'

似乎来自这个电话:

iframe.contentWindow.document

所以,显然,iframe.contentWindowiframe.contentDocument都是空的。

现在出现了奇怪的部分:这只发生在其中一个锚上

示例:如果我使用URL index.html直接跳转到网站#start,一切正常,但在index.html#aboutus上我得到了上述异常。

请不要问我两个锚之间有什么区别。它们完全不同,我不知道从哪里开始调试。

现在,我的问题是:为什么上面的代码不能在锚#aboutus上工作但在锚#start上工作?


更新:您需要了解更多信息:

  1. 我想使用 src 属性动态填写iframe的内容而不是,而是使用iFrameDoc.write()函数。如您所见,您需要iframe文档,该文档为null。 这种方法适用于其他锚点,但不适用于我的特定锚点“站点”。

    iframeDoc.open(); iframeDoc.write( '富'); iframeDoc.close();

  2. 我也试过等待一段时间,直到iframe加载完毕。

  3. 仍然是相同的结果

    var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
    setTimeout(function(){
    var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
    }, 3000);
    

    “load”事件甚至没有被触发,因为还没有内容写入iframe。

1 个答案:

答案 0 :(得分:1)

我终于找到了问题的根源。存储在变量“container”中的元素未正确附加到DOM树。这就是为什么iframe也不是dom的一部分而且没有创建文档。