2013-05-13 29 views
5
<html> 
<body> 

<button type="button" onclick="clickme()">Click Me</button> 

<script> 
var test = 0; 

function clickme() { 
    test = 1; 
    console.log(test); 
} 

window.onunload = function() { 
    alert("test"); 
} 
</script> 

</body> 
</html> 

Tôi đang sử dụng mã đơn giản này để kiểm tra một số thứ với onunload và onbeforeunload. Đối với một số lý do bất cứ khi nào tôi làm mới/rời khỏi trang và gây ra sự kiện onunload, tôi không nhận được cảnh báo và lỗi trong bảng điều khiển Firebug. Nếu tôi sử dụng onbeforeunload công trình này và tôi nhận được không có lỗi, nhưng tôi nghe onbeforeunload không phải là rất tốt qua trình duyệt.Lỗi cảnh báo không tải lên "NS_ERROR_NOT_AVAILABLE"

NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111  
(NS_ERROR_NOT_AVAILABLE) [nsIDOMWindow.alert] 

alert("test"); 

Tôi không cố gắng cảnh báo biến kiểm tra, chỉ văn bản "kiểm tra" trước khi bất kỳ ai cố gắng chỉ ra điều đó.

+0

bạn đã thử điều này trong IE ...? – Pandian

+1

["Phương thức' showModalDialog() ',' alert() ',' confirm() 'và' prompt() 'hiện được phép làm gì trong suốt quá trình pagehide, trước khi tải và dỡ bỏ các sự kiện."] (Http: // www .w3.org/TR/html5-diff/# changes-2011-05-25) –

+0

@Pandian Rõ ràng là lỗi của Firefox (gợi ý: Nhìn vào tiền tố 'NS_' và' nsI', và đề cập đến Firebug). –

Trả lời

13

Nếu bạn muốn điều đó hoạt động, nó sẽ phải ở trong sự kiện onbeforeunload, nhưng thay vì tạo cửa sổ bật lên cảnh báo/xác nhận, sự kiện onbeforeunload đã tích hợp trong cửa sổ bật lên. Tất cả những gì bạn phải làm là trả về một chuỗi và cửa sổ bật lên sẽ xuất hiện khi người dùng cố gắng điều hướng khỏi trang. Nếu không có biến trả về, sẽ không có cửa sổ bật lên.

  • Điều tuyệt vời với điều này là thông báo bật lên có 2 nút: OK và Hủy.
  • Nếu người dùng chạm OK, trình duyệt sẽ tiếp tục di chuyển ra khỏi trang
  • Nếu hits dùng Hủy bỏ, trình duyệt sẽ hủy bỏ dỡ bỏ và sẽ ở lại trên trang hiện tại
  • Sự kiện onbeforeunload là chỉ pop-up có thể hủy bỏ sự kiện onunload

một ví dụ là dưới đây:

<script type="text/javascript"> 

window.onbeforeunload=before; 
window.onunload=after; 

function before(evt) 
{ 
    return "This will appear in the dialog box along with some other default text"; 
    //If the return statement was not here, other code could be executed silently (with no pop-up) 
} 

function after(evt) 
{ 
    //This event fires too fast for the application to execute before the browser unloads 
} 

</script> 

Nó có vẻ như bạn đang cố gắng để làm một cảnh báo trong trường hợp onunload. Vấn đề ở đây là quá muộn. Trang đã được dỡ hàng và không có dừng nó. Bạn có thể nhận được thông báo cảnh báo để hiển thị, nhưng không quan trọng những gì người dùng nhấp vào vì trang đã được tải xuống.

Đặt cược tốt nhất của bạn là đi với sự kiện onbeforeunload.

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