[英]How to block users from closing a window in Javascript?
是否可以使用退出按鈕[X]阻止用戶關閉窗口? 我實際上在頁面中為用戶提供了一個關閉按鈕來關閉窗口。基本上我要做的是強制用戶填寫表單並提交它。 我不希望他們在提交之前關閉窗口。
我非常感謝您的評論,我不考慮在任何商業網站上托管。 這是內部的事情,我們實際上是讓所有員工參與我們設計的這個調查......
我知道這不是正確的方法,但我想知道我們遇到的問題是否有解決方案......
看看onBeforeUnload
。
它不會強迫某人留下,但會提示他們詢問他們是否真的想離開,這可能是您可以管理的最佳跨瀏覽器解決方案。 (如果您嘗試離開中間答案,則類似於此站點。)
<script language="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit() {
return "You have attempted to leave this page. Are you sure?";
}
</script>
編輯:大多數瀏覽器不再允許onbeforeunload
的自定義消息。
請參閱 2016 年 2 月 18 日的此錯誤報告。
onbeforeunload 對話框用於現代 Web 上的兩件事:
1、防止用戶不慎丟失數據。
2. 欺騙用戶。為了在不阻止前者的同時限制它們對后者的使用,我們將不顯示網頁提供的字符串。 相反,我們將使用通用字符串。
Firefox 已經這樣做了[...]
如果您不想為所有事件顯示彈出窗口,您可以添加條件,例如
window.onbeforeunload = confirmExit;
function confirmExit() {
if (isAnyTaskInProgress) {
return "Some task is in progress. Are you sure, you want to close?";
}
}
這對我來說很好用
當用戶按下 ALT + F4 或從任務管理器關閉它時你會做什么
如果他們沒有在 cookie 或數據庫中完成它,你為什么不跟蹤它,當他們下次訪問時只需將相同的屏幕帶回來......:順便說一句......你還沒有完成填寫這個表格...... ”
當然,如果您在互聯網泡沫破滅之前就在附近,您會記得色情風暴,如果您關閉 1 個窗口,其他 15 個窗口將打開..所以是的,有代碼可以檢測窗口關閉,但如果您按 ALT + F4 兩次,它將關閉孩子和父母(如果它是一個彈出窗口)
這將彈出一個對話框,詢問用戶是否真的想關閉或留下,並帶有一條消息。
var message = "You have not filled out the form.";
window.onbeforeunload = function(event) {
var e = e || window.event;
if (e) {
e.returnValue = message;
}
return message;
};
然后,您可以在提交表單或其他內容之前取消設置它
window.onbeforeunload = null;
請記住,這非常煩人。 如果您試圖強迫您的用戶填寫他們不想填寫的表單,那么您將失敗:他們會找到關閉窗口的方法,並且永遠不會回到您的卑鄙網站。
那個怎么樣?
function internalHandler(e) {
e.preventDefault(); // required in some browsers
e.returnValue = ""; // required in some browsers
return "Custom message to show to the user"; // only works in old browsers
}
if (window.addEventListener) {
window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
window.attachEvent('onbeforeunload', internalHandler);
}
如果您發送的內部調查需要貴公司員工 100% 參與,那么更好的方法是讓表單跟蹤響應者 ID/用戶名/電子郵件等。每隔幾天左右就發送一個不錯的小通過電子郵件提醒您組織中的人員完成調查……您甚至可以自動執行此操作。
強迫用戶做他們不一定想做的事情是一種糟糕的做法。 您永遠無法真正阻止他們關閉瀏覽器。
但是,您可以通過在當前網頁上創建一個div
來覆蓋其余控件的頂部,這樣您的表單是唯一可訪問的內容,從而實現類似的效果。
那么您可以使用window.onclose
事件並在事件處理程序中返回false
。
function closedWin() {
confirm("close ?");
return false; /* which will not allow to close the window */
}
if(window.addEventListener) {
window.addEventListener("close", closedWin, false);
}
window.onclose = closedWin;
代碼取自該站點。
另一方面,如果他們強制關閉(通過使用任務管理器或這些行中的某些內容),您將無能為力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.