我使用jQueryMobile创建了一个单页网站。
“单页”表示整个网站只包含一个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.contentWindow
和iframe.contentDocument
都是空的。
现在出现了奇怪的部分:这只发生在其中一个锚上
示例:如果我使用URL index.html直接跳转到网站#start,一切正常,但在index.html#aboutus上我得到了上述异常。
请不要问我两个锚之间有什么区别。它们完全不同,我不知道从哪里开始调试。
现在,我的问题是:为什么上面的代码不能在锚#aboutus上工作但在锚#start上工作?
更新:您需要了解更多信息:
我想使用 src 属性动态填写iframe的内容而不是,而是使用iFrameDoc.write()函数。如您所见,您需要iframe文档,该文档为null。 这种方法适用于其他锚点,但不适用于我的特定锚点“站点”。
iframeDoc.open(); iframeDoc.write( '富'); iframeDoc.close();
我也试过等待一段时间,直到iframe加载完毕。
仍然是相同的结果
var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
setTimeout(function(){
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
}, 3000);
“load”事件甚至没有被触发,因为还没有内容写入iframe。
答案 0 :(得分:1)
我终于找到了问题的根源。存储在变量“container”中的元素未正确附加到DOM树。这就是为什么iframe也不是dom的一部分而且没有创建文档。