2013-06-04 52 views
1

我正在創建基於Java的(JSF)服務器的小型JavaScript模擬。 bootstrap JavaScript文件將使用AJAX下載並解析一堆文件,然後生成一個大的HTML字符串。這個HTML字符串是一個完整的HTML文檔 - 它有一個文檔類型,頭,腳本包括,內聯腳本,正文等。FireFox中的HTML/iframe出錯 - 組件返回的失敗代碼:0x80004005(NS_ERROR_FAILURE)[nsIDOMHistory.pushState]

我不想使用真正的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]

我不明白這個錯誤 - 如果你使用螢火JavaScript控制檯在Firefox中做相同的代碼history.pushState(null,null,"#test")任何網頁上它工作正常 - 但在這種特殊情況下,它不起作用。

我也嘗試在當前頁面的文檔上執行document.open(); document.write(html); document.close()(而不是創建一個iframe),但是同樣的問題發生了 - 只有這一次,如果我把firebug的斷點放入插入HTML片段的javascript代碼中,斷點不起作用,這意味着我不能再在firefox中調試任何東西。至少在iframe方法中,斷點起作用。

誰能解釋一下這個問題嗎?

這裏是另一個相關的問題,我昨天問這導致發現此錯誤:Firefox Fail - After using document.write and update to location.hash causes page refresh

回答

0

你可以把這段代碼

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

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

整個的一點是,是內部文件撰寫書面頁面正在推動的狀態。 Bootstrap外部頁面正在生成HTML字符串,並且不知道它生成的HTML將需要推送新的歷史記錄狀態。新的HTML字符串包含完整的Web 2.0類型應用程序,可以完成許多不同的任務。因此,將'history.pushState'添加到引導頁面中根本沒有意義。 – codefactor

0

我遇到了一個前類似的問題試圖在iframe中使用history.pushState(Ember Router location: 'history'路由方法)打開Ember應用程序。在Firefox中進行硬刷新(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

相關問題