FireFox中HTML / iframe出错 - 组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIDOMHistory.pushState]

时间:2013-06-04 20:22:58

标签: javascript firefox iframe document.write

我正在创建一个基于java(JSF)服务器的小型javascript模拟。 bootstrap javascript文件将使用AJAX下载并解析一堆文件,然后生成一个大的HTML字符串。此HTML字符串是一个完整的HTML文档 - 它包含doctype,head,脚本包含,内联脚本,正文等。

我不想使用真正的JSF后端的原因是因为我希望能够有一个纯UI环境来测试我的代码,而没有任何java / oracle服务器减慢我的速度。

我想与任何人共享我的代码(例如.zip文件中),他们应该可以在任何浏览器中打开页面(在进行AJAX调用时使用小的加载屏幕),而不安装某些服务器在他们的机器上。

这个问题的答案让我探索更多 - 现在我遇到了一个不同的错误,但我似乎无法解释它。

Fiddle #1:这个尝试使用iframe的document.write将HTML放入iframe。在此HTML中,有一个脚本可以推送新的历史状态history.pushState(null, null, hash)

Fiddle #2:这个尝试将HTML放入iframe,但这次只使用location.hash = hash

这两个小提琴似乎在Chrome和Safari以及IE 9中运行良好 - 但Firefox出现以下错误:

NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]

我不明白这个错误 - 如果你使用FireBug中的javascript控制台在firefox的任何页面上执行相同的代码history.pushState(null,null,"#test")它工作正常 - 但在这种特殊情况下它不起作用。

我还尝试在当前页面中的文档上执行document.open(); document.write(html); document.close()(而不是创建iframe),但是同样的问题发生了 - 只有这次我将firebug中的断点放入插入的javascript代码中HTML片段,断点不起作用,这意味着我无法在Firefox中调试任何东西。至少使用iframe方法,断点可以正常工作。

任何人都可以解释这个问题吗?

以下是我昨天提出的另一个相关问题,导致发现此错误:Firefox Fail - After using document.write and update to location.hash causes page refresh

2 个答案:

答案 0 :(得分:0)

您可以输入此代码

history.pushState(null,null,"#test") 

之前

document.open(); 
document.write(html); 
document.close(); 

答案 1 :(得分:0)

我在iframe中尝试使用history.pushState(路由的Ember路由器location: 'history'方法)打开Ember应用时遇到了类似的问题。只有在Mac上进行硬刷新(Mac上为cmd + shift + r或Windows上为ctrl + f5)时,才会出现此问题。这个问题只出现在我的FireFox中,在Chrome和Safari中运行良好,具有类似的硬刷新功能。

首次导航到页面或正常刷新页面时,我不会遇到此问题(cmd + r Mac,f5 Windows)。我发现很多看似与Bugzilla有关的Mozilla相关,但很多都很接近。这个似乎代表了我所拥有的相同问题,并且在当前版本的Firefox(编写本文时的v37.0.1)中仍然是开放的。

https://bugzilla.mozilla.org/show_bug.cgi?id=1003100