1

我正在创建一个基于 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

4

2 回答 2

0

I have run into a similar issue trying to open an Ember app using history.pushState (Ember Router location: 'history' method of routing) inside an iframe. It appears the issue only occurs when doing a hard refresh (cmd + shift + r on Mac or ctrl + f5 on Windows) in Firefox. The issue only occurs for me in FireFox, works fine in Chrome and Safari with similar hard refresh.

The issue does not occur for me when navigating to the page for the first time or when normally refreshing the page (cmd + r Mac, f5 Windows). I have found many seemingly related on Bugzilla for Mozilla but many are close. This one seems to represent the same issue I am having and is still open as of current versions of Firefox (v37.0.1 at time of writing).

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

于 2015-04-15T15:37:51.687 回答
0

你可以把这段代码

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

document.open(); 
document.write(html); 
document.close(); 
于 2013-06-07T11:28:09.527 回答