這是的情況:javascript中斷事件
如果我在頁面1現在我點擊從頁面1的鏈接導航到頁面-2。在第2頁被加載之前,我正在逃跑,以至於我仍然停留在第1頁。
那時我想追蹤那個事件。
是否有任何JavaScript事件,以便我可以跟蹤上述情況。
更多信息:
爲了避免「頁面2」,當用戶點擊從頁面1我是重定向到頁-2和禁用鏈路的鏈路併發請求(以避免多個請求到。「頁2)在這一點上,當我們按Esc和中止加載頁面2,我需要在頁面-1再次啓用鏈接
這是的情況:javascript中斷事件
如果我在頁面1現在我點擊從頁面1的鏈接導航到頁面-2。在第2頁被加載之前,我正在逃跑,以至於我仍然停留在第1頁。
那時我想追蹤那個事件。
是否有任何JavaScript事件,以便我可以跟蹤上述情況。
更多信息:
爲了避免「頁面2」,當用戶點擊從頁面1我是重定向到頁-2和禁用鏈路的鏈路併發請求(以避免多個請求到。「頁2)在這一點上,當我們按Esc和中止加載頁面2,我需要在頁面-1再次啓用鏈接
我嘗試使用此代碼:
<html>
<head>
<script>
document.onkeypress = KeyPressed;
function KeyPressed(e)
{
if (!e) e = window.event; //IE Compatibility
alert(e.keyCode);
}
</script>
</head>
<body>
<a href="http://stackoverflow.com">Stack Overflow</a>
</body>
</html>
它檢測到您在頁面上時按下的任何按鍵。一旦您點擊SO鏈接並點擊轉義,不是發生。瀏覽器已經收到來自SO服務器的響應,並且正在開始處理它,該頁面已經「保留」,儘管出現在瀏覽器狀態欄中顯示「等待http://stackoverflow.com」的狀態。
頁面卸載時會觸發兩個事件。
window.onUnload
window.onBeforeUnload
您可以使用這些事件來取消該頁面的卸載,但是在那之後,有頁面考慮做。
你可以做的是讓頁面等待5秒左右纔去新的一頁:
如:
window.onunload = (function() {
var time = new Date();
var cancel = false;
window.onkeypress = function (e) {
if ((e || window.event).keyCode == 27) cancel = true;
};
while(time > new Date() - 5000) {
if (cancel) return false;
}
});
事實上可能導致一些瀏覽器掛起,因爲你佔用給JS腳本的所有處理時間。即:在while塊中。
您可以通過執行阻塞函數調用來避免這種情況,該函數調用並不像流程密集型那樣是受網絡延遲限制的調用。例如:XMLHttpRequest()等。我不認爲像setTimeout()這樣排隊的調用將在這裏工作,因爲它們不會阻塞。
是的,這將凍結瀏覽器。 – 2009-09-02 07:36:30
由於<a href>
標記告訴瀏覽器移動到另一個頁面,因此決定它是否仍然會運行腳本。如果我是這樣,我不會聽。
如果要重寫,我想你應該告訴瀏覽器不聽那個特定onClick
事件,並把一個回調中加載目標網頁背景的地方。這可以確保您的頁面仍處於活動狀態。目標頁面加載後(通過您的腳本),您可以請求瀏覽器使用接收到的內容進行更新。
這就是理論。我不知道DOM是否可以覆蓋已加載頁面的內容,但我想它確實如此。
您對處理此事件的想法顯然是錯誤的。需要阻止按鈕才能使用戶無法執行雙重發布數據。但是,請求會立即發送(!)點擊鏈接後。
所以,如果你點擊鏈接一次,停止頁面,然後再次點擊 - 它會提交兩次,這不是預期發生的事情。
我不確定這是不可能的,沒有一些定時器或瀏覽器破解。如果你使用這種黑客技術,不同瀏覽器會出現很多問題。你能解釋爲什麼你需要這個事件嗎?也許有更好的方法來解決你的問題? – bezmax 2009-09-02 06:19:24
爲避免對「page-2」的併發請求,當用戶單擊頁面1中的鏈接時,我將重定向到page-2並禁用鏈接(以避免多個請求轉到「page-2」)。我們打Esc並中止加載第2頁,我需要在第1頁再次啓用鏈接 – Madhu 2009-09-02 06:39:11
@Madhu:額外的信息是有幫助的,你應該把它添加到問題 – 2009-09-02 07:20:28