Mặc dù một số hộp thoại này nói gì, chúng không thể làm bất cứ điều gì độc hại . Bạn luôn có thể nhấp vào OK hoặc Rời khỏi Trang để đóng trang vi phạm mà không có bất kỳ hậu quả nào.
Nếu hộp thoại quá dài và các nút tắt màn hình , bạn có thể nhấnEnter để xác nhận đóng trang.
Nếu bạn không có bàn phím (thiết bị màn hình cảm ứng), hãy sử dụng bookmarklet bên dưới hoặc xem câu trả lời của SimpleSimon (chỉ Chrome).
Bây giờ, một số chi tiết.
Chỉ có một cách để thực hiện một số hành động khi một trang đang đóng: thông qua onbeforeunload
sự kiện. Tất nhiên điều này có thể dễ dàng được sử dụng đối với người dùng (ví dụ: khi anh ta cố gắng đóng một trang, nó sẽ mở bản sao của nó trong một cửa sổ mới), vì vậy nó rất hạn chế.
Trên thực tế, điều hợp lý duy nhất bạn có thể làm là mở một hộp thoại với văn bản tùy chỉnh và hai nút, một để rời khỏi trang và một để ở lại. Điều duy nhất một trang có thể làm với hộp thoại đó là xác định văn bản của nó. Các nút và thanh tiêu đề là bất biến. Đây là ảnh chụp màn hình từ Firefox 3.6: ( phiên bản Firefox rất cũ)
Tất nhiên, khi bạn cho phép mọi người hiển thị cửa sổ bật lên với bất kỳ văn bản nào và chỉ các nút OK / Hủy , thì bạn có thể chắc chắn rằng sớm hay muộn một số kẻ sẽ sử dụng nó để chống lại bạn.
Trong ảnh chụp màn hình ở trên, OK có nghĩa là "Thoát khỏi trang này", nhưng mô tả tùy chỉnh gợi ý thêm điều gì đó. Vì vậy, các trình duyệt đã thay đổi các hộp thoại để khó khiến chúng bị sai lệch. Ví dụ, các phiên bản gần đây của Firefox dường như bỏ qua văn bản tùy chỉnh:
Chrome hiển thị văn bản tùy chỉnh, nhưng luôn xuất hiện một câu hỏi hỏi người dùng muốn làm gì và các nút nêu rõ hành động của họ: (nhưng nó vẫn thiên về các thông báo "video mèo"!)
Đây là Internet Explorer 10, cũng "dễ bị mèo":
Opera 12 chỉ cần bỏ qua onbeforeunload
sự kiện và nếu bạn cố gắng đóng một tab như thế, nó sẽ đóng giống như bất kỳ sự kiện nào khác. Mặc dù vậy, tôi chưa thử nghiệm Opera mới nhất.
Vì vậy, để tổng hợp những điều quan trọng nhất:
- Các trang không thể hiển thị các hộp thoại với bất kỳ văn bản. Trang web có thể yêu cầu trình duyệt hiển thị hộp thoại với văn bản tùy chỉnh, nhưng trình duyệt có thể bỏ qua hoàn toàn (Opera), sử dụng văn bản chung (Firefox) hoặc nói rõ ràng điều gì sẽ xảy ra (Chrome, IE).
- Chi tiết của hộp thoại tùy thuộc vào trình duyệt bạn đang sử dụng, nhưng các nút luôn không thay đổi. Nếu họ không nói rõ ràng ai sẽ làm gì, thì OK có nghĩa là "rời khỏi trang này * và Hủy là" ở lại đây ".
- Trang web không thể thực hiện bất kỳ hành động độc hại nào nếu bạn quyết định rời bỏ chúng. Các tệp của bạn sẽ không được thay thế bằng video mèo, bạn sẽ không bị nhiễm 135234 virus và FBI sẽ không được thông báo rằng bạn có phần mềm bất hợp pháp trên máy tính của mình.
Bạn có thể vô hiệu hóa onbeforeunload
sự kiện nếu bạn muốn, ngăn chặn hiệu quả các trang yêu cầu bạn rời khỏi hoặc ở lại. Dưới đây là một trình duyệt chéo UserScript . (cuộn xuống nếu liên kết đã chết)
Nếu bạn đang truy cập một trang web cụ thể hiển thị cửa sổ bật lên độc hại và bạn vẫn sợ nhấp vào Rời khỏi , bạn có thể tạo một bookmarklet để xóa nó. Nhấp chuột phải vào thanh dấu trang của bạn, chọn Dấu trang mới (hoặc tương đương) và dán mã này dưới dạng URL: (đó chỉ là mã được trích từ liên kết trên)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
Sau đó, chỉ cần nhấp vào dấu trang đó và cửa sổ bật lên sẽ tạm thời bị xóa khỏi trang hoạt động.
Nếu bạn muốn kiểm tra xem các cửa sổ bật lên đó trông như thế nào trong trình duyệt của bạn hoặc kiểm tra bookmarklet / usercript, hãy tạo một tệp văn bản với mã sau đây và lưu nó dưới dạng .html
tệp:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
Có vẻ như liên kết usercript đã chết ngay bây giờ, vì vậy đây là một bản sao được trích xuất từ bộ đệm archive.org . Tất cả tín dụng cho người tạo kịch bản gốc.
// ==UserScript==
// @name Disable - remove onbeforeunload
// @namespace
// @description Disable - remove the annoying onbeforeunload event
// @include *
// @author netvisiteurs.com
// ==/UserScript==
var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);