我正在创建一个基于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
答案 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)中仍然是开放的。