2009-10-21 37 views
12

Giả sử tôi có hai trang. Một trong số chúng chứa một cái khác bên trong là iframe. Nếu bạn đăng ký sự kiện onbeforeunload trên trang chính, thì sự kiện này sẽ không kích hoạt nếu bạn đóng tab khi iframe được lấy nét. Tôi cho rằng đó là lỗi được viết ở đây: Google Chrome issuesGoogle chrome onbeforeunload hành vi sai với iframe

Nhưng tôi đã đề cập rằng, ví dụ: tài liệu google xử lý tình huống này. Bất cứ ai có thể cho tôi một giải pháp? Lưu ý quan trọng là tôi không có quyền truy cập thực tế vào nội dung iframe vì nó là trình soạn thảo html của bên thứ ba (WYSIWYG).

+0

bạn đã cố gắng đăng ký sự kiện onbeforeunload iframe chưa? – barkmadley

+0

Có. Tuy nhiên, nó không có hiệu lực. – Vetragon

+0

Bất kỳ ai cũng có bản cập nhật về điều này? – Chris

Trả lời

4

Tôi biết đó là một câu hỏi cũ nhưng chỉ để giúp đỡ những người đang đến đây qua Tìm kiếm:

Lỗi là fixed by now here.

Vì chrome 10, sự cố phải được khắc phục.

Có một số related bug though here.

Vì vậy, trong ngắn hạn nếu bạn vẫn không thể bắn "onbeforeunload" trên khung hình, nó có thể là do sự thay đổi trong nội dung thông qua JavaScript như document.opendocument.writedocument.close, vv

0

mã dưới đây sẽ làm việc trên tất cả các trình duyệt

if (typeof window.addEventListener != 'undefined') { 
    window.addEventListener('beforeunload', test, false); 
} 
else if (typeof document.addEventListener != 'undefined') { 
    document.addEventListener('beforeunload', test, false); 
} 
else if (typeof window.attachEvent != 'undefined') { 
    window.attachEvent('onbeforeunload', test); 
} 

else { 
    if (typeof window.onbeforeunload == 'function') { 
     window.onbeforeunload = function() { 
      test(); 
     }; 
    } 
    else { 
     window.onbeforeunload = test; 
    } 
} 

function test(){ alert('working');} 

thử này một lần ...

+3

Điều này vẫn không hoạt động trên các phiên bản Chrome gần đây (chỉ cần thử 18.0). –

+1

Vẫn không hoạt động đối với tôi trong Chrome v40 – spyter

0

Bạn cũng có thể cố gắng thay đổi url của khung nội tuyến để "about: blank", ví dụ:

0.123.
$("#myFrameId")[0].src = "about:blank"; 

Nó buộc chrome "sạch" đóng cửa sổ bị ô nhiễm trong khung nội tuyến.

Chỉ cần đề cập: nếu bạn chỉ muốn đóng khung nội tuyến chứ không phải cửa sổ chính, bạn phải cung cấp đủ thời gian để thực hiện trình xử lý bạn đã đính kèm vào 'onbeforeunload'.

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