2012-06-05 117 views
8

我試圖在用戶離開(關閉)瀏覽器或頁面時運行一個函數,並且它已在除Chrome之外的所有瀏覽器中運行。當選項卡(或瀏覽器)關閉時,Chrome onbeforeunload事件

瀏覽器成功運行的功能,如果我從頁面進行瀏覽,但不運行它,如果我關閉選項卡或完全關閉瀏覽器。

我在最後運行的函數會創建一個圖像並將一些數據發送到我的服務器(類似於任何分析報告):img.src =「url?data = yyy」。這張圖片是用js動態創建的。

有人可以解釋一下問題可能是什麼? 我已經把範圍縮小到幾個原因:

1)我沒有使用正確的事件時,標籤關閉(即不beforeunload)

2)Chrome的實際運行功能,但沒有按圖像因爲瀏覽器/頁面關閉而無法發送。

任何幫助表示讚賞。謝謝。

這裏的示例代碼:

if(window.addEventListener){ 
    window.addEventListener("beforeunload", page_unload, false);   
} 
function page_unload(){ 
    var img  = new Image(); 
    var img_src = "http://www.myurl.com?data=yyy" 
    img.src = img_src; 
} 
+0

每個chrome選項卡都運行在它自己的進程中嗎?因此,如果你在tab關閉時運行了某些東西,即使它運行,包含運行代碼的進程也會停止。否則,你可能會看到一堆懸掛的鍍鉻標籤打開,這是我以前從未見過的。 –

+1

正確,每個標籤都是它自己的過程。並且與該過程相關的任何代碼也會結束,這是有道理的。 Firefox優雅地處理這種情況,並做我需要做的事情,我希望我錯過了一些關於Chrome的事情 – Nik

+3

你想做的事情是不可能的。 'onbeforeunload'事件只能用於拋出一個對話框來鼓勵用戶留在你的頁面上(通過返回文本來提示用戶) - 當事件觸發時,你沒有任何時間留下來發出HTTP請求。 – duskwuff

回答

0

我有Chrome存在的相關問題,並使用jQuery解決了這個問題:

$(window).unload(function() { 
    //Call your function 
    page_unload(); 
}); 

出於某種原因,jQuery的卸載事件更好地工作在Chrome在某些情況下, JavaScript beforeunload無法正常工作。

+0

不適用於我 – TMS

相關問題