2009-09-02 72 views
3

這是的情況:javascript中斷事件

如果我在頁面1現在我點擊從頁面1的鏈接導航到頁面-2。在第2頁被加載之前,我正在逃跑,以至於我仍然停留在第1頁。

那時我想追蹤那個事件。

是否有任何JavaScript事件,以便我可以跟蹤上述情況。

更多信息:

爲了避免「頁面2」,當用戶點擊從頁面1我是重定向到頁-2和禁用鏈路的鏈路併發請求(以避免多個請求到。「頁2)在這一點上,當我們按Esc和中止加載頁面2,我需要在頁面-1再次啓用鏈接

+0

我不確定這是不可能的,沒有一些定時器或瀏覽器破解。如果你使用這種黑客技術,不同瀏覽器會出現很多問題。你能解釋爲什麼你需要這個事件嗎?也許有更好的方法來解決你的問題? – bezmax 2009-09-02 06:19:24

+1

爲避免對「page-2」的併發請求,當用戶單擊頁面1中的鏈接時,我將重定向到page-2並禁用鏈接(以避免多個請求轉到「page-2」)。我們打Esc並中止加載第2頁,我需要在第1頁再次啓用鏈接 – Madhu 2009-09-02 06:39:11

+0

@Madhu:額外的信息是有幫助的,你應該把它添加到問題 – 2009-09-02 07:20:28

回答

3

我嘗試使用此代碼:

<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」的狀態。

0

頁面卸載時會觸發兩個事件。

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()這樣排隊的調用將在這裏工作,因爲它們不會阻塞。

+0

是的,這將凍結瀏覽器。 – 2009-09-02 07:36:30

0

由於<a href>標記告訴瀏覽器移動到另一個頁面,因此決定它是否仍然會運行腳本。如果我是這樣,我不會聽。

如果要重寫,我想你應該告訴瀏覽器聽那個特定onClick事件,並把一個回調中加載目標網頁背景的地方。這可以確保您的頁面仍處於活動狀態。目標頁面加載後(通過您的腳本),您可以請求瀏覽器使用接收到的內容進行更新。

這就是理論。我不知道DOM是否可以覆蓋已加載頁面的內容,但我想它確實如此。

+0

如果目標頁面在不同的服務器上,JS不會讓你請求它 – Alsciende 2009-09-02 07:40:20

+0

我不是專家 - 有沒有可能的HttpRequest類的JavaScript?你可以做XMLHttpRequest,不是嗎? – xtofl 2009-09-02 08:54:55

1

您對處理此事件的想法顯然是錯誤的。需要阻止按鈕才能使用戶無法執行雙重發布數據。但是,請求會立即發送(!)點擊鏈接後。

所以,如果你點擊鏈接一次,停止頁面,然後再次點擊 - 它會提交兩次,這不是預期發生的事情。