2012-06-05 66 views
8

Tôi đang cố gắng chạy một chức năng khi người dùng rời khỏi (đóng) trình duyệt hoặc trang và tôi đã làm việc đó trong tất cả các trình duyệt ngoại trừ Chrome.Sự kiện onbeforeunload của Chrome khi tab (hoặc trình duyệt) đóng

Chrome chạy chức năng thành công nếu tôi điều hướng khỏi trang nhưng không chạy nó nếu tôi đóng tab hoặc đóng hoàn toàn trình duyệt.

Hàm tôi đang chạy ở cuối tạo hình ảnh và gửi một số dữ liệu đến máy chủ của tôi (tương tự như bất kỳ báo cáo phân tích) nào: img.src = "url? Data = yyy". Hình ảnh này được tạo động với js.

Ai đó có thể làm sáng tỏ vấn đề có thể là gì? tôi đã thu hẹp nó xuống để một vài lý do:

1) Tôi không sử dụng các sự kiện chính xác khi đóng cửa tab (tức là không beforeunload)

2) Chrome thực sự chạy chức năng nhưng hình ảnh doesn Không được gửi vì trình duyệt/trang đóng.

Mọi trợ giúp đều được đánh giá cao. Cảm ơn.

Dưới đây là đoạn code mẫu:

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

mỗi tab chrome đang chạy đúng quy trình của chính nó? Vì vậy, nếu bạn có một cái gì đó chạy trên tab đóng, ngay cả khi nó chạy, quá trình có chứa các mã đang chạy sẽ dừng lại. Nếu không, bạn có thể có thể thấy một loạt các tab chrome treo mở, mà tôi chưa bao giờ thấy trước đây. –

+1

bên phải, mỗi tab là quá trình riêng của nó..và sẽ có nghĩa là bất kỳ mã nào được liên kết với quy trình đó cũng kết thúc. Firefox xử lý tình trạng này một cách duyên dáng và làm những gì tôi cần nó để làm như vậy tôi đã hy vọng rằng tôi bị mất một cái gì đó liên quan đến chrome – Nik

+3

Những gì bạn đang cố gắng để làm là không thể. Sự kiện 'onbeforeunload' chỉ có thể được sử dụng để ném lên một hộp thoại để khuyến khích người dùng ở lại trang của bạn (bằng cách trả lại văn bản để nhắc người dùng) - khi sự kiện cháy, bạn không có thời gian còn lại để thực hiện yêu cầu HTTP. – duskwuff

Trả lời

0

Tôi đã có một vấn đề có liên quan với Chrome và giải quyết nó bằng cách sử dụng jQuery:

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

Đối với một số lý do jQuery dỡ bỏ sự kiện hoạt động tốt hơn trong Chrome trong một số trường hợp JavaScript beforeunload không hoạt động đúng.

+0

không hoạt động đối với tôi – TMS

Các vấn đề liên quan