FireFox中HTML/iframe错误-组件返回失败代码:0x80004005 (NS_ERROR_FAILURE)
Error with HTML/iframe in FireFox - Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]
我正在创建一个基于java (JSF)服务器的小型javascript模拟。bootstrap javascript文件将下载并使用AJAX解析一堆文件,然后生成一个大的HTML字符串。这个HTML字符串是一个完整的HTML文档——它有doctype, head, script includes, inline scripts, body等。
我不想使用真正的JSF后端是因为我希望能够有一个纯粹的UI环境来测试我的代码,而没有任何java/oracle服务器减慢我的速度。
我想与任何人分享我的代码(例如,在.zip文件中),他们应该能够在任何浏览器中打开页面(在AJAX调用时有一个小加载屏幕),而没有在他们的机器上安装一些服务器。
这个问题的答案促使我进行了更多的探索——现在我遇到了一个不同的错误,但我似乎无法解释它。
第一个错误:这个错误试图使用iframe的document.write将HTML放入iframe中。在这个HTML中有一个脚本推送一个新的历史状态history.pushState(null, null, hash)
第二种方法:这个方法试图将HTML放入iframe中,但这次它只使用location.hash = hash
这两个fiddles似乎在Chrome和Safari和ie9中工作良好-但Firefox给出以下错误:
NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.pushState]
我不明白这个错误-如果你在firefox的任何页面上使用FireBug中的javascript控制台做同样的代码history.pushState(null,null,"#test")
,它工作得很好-但在这种特殊情况下它不工作。
我还尝试在当前页面的文档上执行document.open(); document.write(html); document.close()
(而不是创建iframe),但同样的问题发生了-只有这一次,如果我把断点在firebug插入到HTML片段中插入的javascript代码,断点不工作,这将意味着我不能再调试firefox中的任何东西。至少在iframe方法中,断点可以工作。
这是我昨天问的另一个相关问题,导致发现这个错误:Firefox失败-使用文档后。写入和更新位置。哈希导致页面刷新
你可以把这段代码
history.pushState(null,null,"#test")
之前document.open();
document.write(html);
document.close();
我在尝试使用历史打开Ember应用程序时遇到了类似的问题。pushState(烬路由器location: 'history'
路由方法)在iframe内。似乎这个问题只发生在Firefox中进行硬刷新(Mac上的cmd + shift + r
或Windows上的ctrl + f5
)时。这个问题只发生在我的FireFox中,在Chrome和Safari中工作良好,具有类似的硬刷新。
当我第一次导航到页面或正常刷新页面(cmd + r
Mac, f5
Windows)时,这个问题不会发生。我发现了许多看似与Mozilla的Bugzilla相关的东西,但很多都很接近。这个问题似乎代表了我遇到的同样的问题,并且在当前版本的Firefox(撰写本文时为v37.0.1)中仍然存在。