2

我使用 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 上运行?


更新:为您提供更多信息:

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

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

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

结果还是一样

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

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

4

1 回答 1

1

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

于 2013-01-30T10:59:48.037 回答