
許多頁面在您離開時都會發出警報:如果您關閉選項卡、在不保存的情況下導航離開等,網站會出於多種原因警告/阻止您離開,直到您確認警報為止,例如“您確定要離開此頁面?
這通常是透過onbeforeunload
和/或onunload
處理程序完成的。
這裡就是一個例子。
有什麼方法可以防止這些處理程序產生警報/使用者阻止事件?基本上,我想啟用 JS,並特別禁止那些會阻止我在沒有額外點擊的情況下離開頁面的事情。
onbeforeunload
處理onunload
人員仍應開火;他們只是不應該被允許做阻止用戶的事情。這意味著不會出現警報,也不會執行耗時超過幾秒鐘的操作。
我發現了一些插件,可以編輯/Greasemonkey 修補特定頁面的 JavaScript,並稍微修改一下它們的程式碼,嘗試使它們更加普遍適用。不過,我希望能找到一個可行的解決方案任何試圖阻止使用者退出的頁面。
答案1
好吧,最簡單的事情就是直接覆蓋頁面腳本,並將事件重新分配給null
.
window.onbeforeunload = null;
這應該在任何地方都有效,除非他們真的是惡意的,並且不斷地自己重新分配它。在這種情況下,保持設定的循環null
可能會起作用。
while(true) {
if (window.onbeforeunload != null) {
window.onbeforeunload = null;
}
}
現在,請注意,某些頁面會永久使用此功能。以 YouTube 上傳頁面為例:如果您在上傳過程中離開,您可能會損失幾個小時的進度!或者可能是您正在填寫的網頁表單(您可能不想再次填寫),或者您可能不想重新輸入的訊息(論壇/電子郵件)。有了這個功能,您就受到了保護。
另一個問題是任何頁面將其用於某些次要目的,例如透過 AJAX 保存資料。他們可能會使用此事件來觸發儲存操作,並希望使用者花足夠長的時間來點擊按鈕以完成請求。再說一次,這樣做通常是為了讓你免受自己的傷害。
但是,顯然,我們都知道許多頁面都用它來做壞事。因此,如果您知道想要它運行的任何頁面,您始終可以擁有一個白名單系統。實際上沒有辦法阻止此操作,除非完全阻止window.onbeforeunload
以及它可能採取的任何(可能是好的)操作。
沒有辦法(在沒有給定頁面代碼的先驗知識的情況下)在停止彈出框的同時保持良好的操作。這個盒子是不是一個alert()
。此框由瀏覽器生成,作為 的預期行為onbeforeunload
。人們透過讓他們分配的任何函數window.onbeforeunload
傳回一個字串來創建它。該字串將列印在彈出視窗中。
window.onbeforeunload = function() {
//Whatever
return "WARNING! You have unsaved changes that may be lost!";
}
因此,如果不刪除該功能,您將無法阻止彈出視窗。
另外,如果您確實找到了方法,任何 AJAX 都會失敗。彈出視窗會給請求時間來處理,沒有它,資料可能會遺失。
至於說onunload
,應該不能用這個來屏蔽你。既然火了後頁面卸載。但為了安全起見,您可以隨時執行此操作,window.onunload = null;
並且應妥善處理。
答案2
// ==/UserScript==
var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);
答案3
有一個很好的工具可以處理 Windows 系統上任何煩人的彈出視窗 -點選關閉。您可以從以下位置下載:這裡。我檢查了它,它適用於 SharePoint 網站的「您所做的更改可能無法儲存」警報。