2012-11-21 74 views
14

嘿,我有以下statechange事件的窗口中設置:更改文檔時窗口事件會發生什麼情況?

History.Adapter.bind(window,'statechange',function(e){ 
console.log("statechange event occured "); 
//more code 
    var newDoc = document.open(); 
    newDoc.write(file); 
    newDoc.close(); 
}); 

我使用history.js但並不在這種情況下,因爲它不僅結合了statechange regulary,我得到的值file像應該和工作正常。

現在我有這樣的代碼(和其他代碼)的外部JS文件中, 我正在通過所有a標籤迭代,並應用以下click事件裏面的文件:當我點擊

$(element).on("click",function(e){ 
    e.preventDefault(); 
    //more code 

    History.pushState({file : file},title, fullHref); 


}); 

現在文檔正在按預期發生更改,但嘗試使用後退/前進按鈕時statechange事件不會觸發。

我應該提到這個js也包含在im loading中。

所以我最初的想法是,隨着文件的變化,但窗口沒有,事件依然存在。這是不正確的,因爲它應用了statechange事件的乘法時間。所以我嘗試了一次使用cookie來應用這個事件,但那仍然是一樣的。

現在,如果不是改變文檔,我只是簡單地將它應用於jQuerys .html() statechange事件被激發,因爲我認爲它與文檔有關。

爲什麼會發生這種情況?我相信,如果我更多地瞭解更改文檔時發生的窗口事件,我可以解決此問題。

嘗試次數:

  • 我現在也嘗試通過普通紀錄API綁定到popstate事件,還是同樣的結果給予或採取。 pushState不會觸發popstate,但後退按鈕卻沒有狀態。
  • 我得出的結論是,我不應該使用history.js,因爲我認爲問題來自那裏,所以我「解決」了我的問題,popstate仍然導致問題,因爲document.open似乎在燒製popstate。還在尋找我一直在使用on嘗試更多信息
  • ,相同的結果

信息

  • 事實上使用歷史這個例子中我們是因爲history.js,如果我使用常規歷史API仍然存在相同的問題。

我已閱讀在MDN是:

{{gecko_minversion_note( 「1.9.2」,「與壁虎1.9.2,文件開始。open()使用

其使用URI的文檔的主體,而不是從堆棧中取回 主體。其結果是,你不能再調用 document.write()的成從鉻不受信任的文檔,即使使用 wrappedJSObject。「)}}

哪個林不知道,但我認爲可以realted這個問題

回答

2

那麼,最後我發現儘管你只是改變文件,窗口事件被刪除,因爲他們躺在文件內。

我用History.js解決了我的問題,我認爲這是因爲改變文檔在某些時候會改變它的事實。

我所做的就是使用原生HTML5歷史API,並重新編寫了新文檔中的popstate事件。

0

你試圖元素與現場結合?

$(element).click(function(e){ 
    e.preventDefault(); 
    //more code 
    History.pushState({file : file},title, fullHref); 
}); 

成爲

$(element).live('click',function(e){ 
     e.preventDefault(); 
     //more code 
     History.pushState({file : file},title, fullHref); 
    }); 
+2

現在不再使用了,你現在應該使用'on',是的我沒有幫助。使用'click'只是我的一個嘗試。 –

0

您必須使用iframe加載文檔並輕鬆更改其文檔。然後,你可以聽像這樣的單擊事件,

$("#iframe").load(function() { 
    $(this.contentWindow).click(function() { 
     // do your click events here 
    }); 
}); 

的IFRAME會重新加載如果更改了src屬性值與另一文檔。

+0

我不'擁有'使用iframe,我不能使用iframe。我的點擊事件確實發生在我使用'document.open()' –

0

您是否嘗試過在document.open()方法中設置目標(請參閱 http://www.w3schools.com/jsref/met_doc_open.asp)? 如果不是'你實際上正在寫入一個空白窗口,你可能會失去歷史對象。

+1

時,w3schools中的信息不可靠,其他網站(如mdn)並未提及這些屬性。 –

+0

您是否試過在單擊時追蹤歷史記錄對象,以便您可以查看該對象是否與根級歷史記錄對象相同? –

+0

不,我不能解決它,因爲我最終解決了它,謝謝你試圖幫助! –

相關問題