我正在创建一个基于 java (JSF) 服务器的小型 javascript 模拟。bootstrap javascript 文件将使用 AJAX 下载并解析一堆文件,然后生成一个大的 HTML 字符串。这个 HTML 字符串是一个完整的 HTML 文档——它有一个 doctype、head、script include、inline scripts、body 等。
我不想使用真正的 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]
我不明白这个错误——如果你history.pushState(null,null,"#test")
在firefox的任何页面上使用FireBug中的javascript控制台执行相同的代码,它工作正常——但在这种特殊情况下它不起作用。
我还尝试document.open(); document.write(html); document.close()
在当前页面中的文档上执行(而不是创建 iframe),但是发生了同样的问题 - 只是这次如果我将 firebug 中的断点放入 HTML 片段中插入的 javascript 代码中,断点不会工作,这意味着我不能再在 Firefox 中调试任何东西。至少使用 iframe 方法,断点可以工作。
任何人都可以阐明这个问题吗?
这是我昨天问的另一个相关问题,导致发现此错误:Firefox Fail - After using document.write and update to location.hash cause page refresh