我使用 jQueryMobile 创建了一个单页网站。
“一页”是指整个网站只包含一个 index.html 文件,而不同的内容通过锚点显示,例如
- index.html#开始
- index.html#contact
- index.html#aboutus
- 等等...
我通过 JavaScript 创建了一个 iFrame,如下所示:
var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
在第 2 行中,我得到一个异常,其中指出:
未捕获的类型错误:无法读取 null 的属性“文档”
这似乎来自这个电话:
iframe.contentWindow.document
所以,显然,两者iframe.contentWindow
都是iframe.contentDocument
空的。
现在出现了奇怪的部分:这只发生在其中一个锚上
示例:如果我使用 URL index.html#start 直接跳转到网站,一切正常,但在 index.html#aboutus 上,我得到了上面提到的异常。
请不要问我这两个主播有什么区别。它们完全不同,我不知道从哪里开始调试。
现在,我的问题是:为什么上面的代码不能在锚#aboutus 上运行,但在锚#start 上运行?
更新:为您提供更多信息:
我想动态填写 iframe 的内容,而不使用src属性,而是使用 iFrameDoc.write() 函数。如您所见,您需要 iframe 文档,该文档为空。这种方法适用于其他锚点,但不适用于我的一个特定锚点“站点”。
iframeDoc.open(); iframeDoc.write('Foo'); iframeDoc.close();
我还尝试等待一段时间,直到 iframe 加载完毕。
结果还是一样
var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
setTimeout(function(){
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
}, 3000);
“加载”事件甚至没有被触发,因为还没有内容写入 iframe。