🏠 返回首頁 

Greasy Fork is available in English.

页面关闭确认

防止页面意外关闭


Installer ce script?
/* eslint-disable no-multi-spaces */
// ==UserScript==
// @name               页面关闭确认
// @name:zh-CN         页面关闭确认
// @name:en            Confirm before closing tab
// @namespace          http://tampermonkey.net/
// @version            0.1
// @description        防止页面意外关闭
// @description:zh-CN  防止页面意外关闭
// @description:en     Prevent closing tabs accidently
// @author             PY-DNG
// @license            GPL-v3
// @match              http*://*/*
// @icon               none
// @grant              GM_registerMenuCommand
// @grant              GM_unregisterMenuCommand
// @grant              GM_getValue
// @grant              GM_setValue
// @grant              GM_addValueChangeListener
// ==/UserScript==
(function __MAIN__() {
'use strict';
const CONST = {
Text_AllLang: {
DEFAULT: 'en',
'en': {
Protect_Tab: '[ ] Confirm before closing this tab',
Protect_All: '[ ] Confirm before closing all tabs',
Unprotect_Tab: '[✔] Confirm before closing this tab',
Unprotect_All: '[✔] Confirm before closing all tabs',
},
'zh': {
Protect_Tab: '[ ] 关闭此页面前进行确认',
Protect_All: '[ ] 关闭全部页面均需确认',
Unprotect_Tab: '[✔] 关闭此页面前进行确认',
Unprotect_All: '[✔] 关闭全部页面均需确认',
}
}
};
const i18n = navigator.language.split('-')[0] || CONST.Text_AllLang.DEFAULT;
CONST.Text = CONST.Text_AllLang[i18n];
let id_tab, id_all;
let protects = {
protected: false,
_tab: false,
get tab() {return protects._tab;},
set tab(v) {
if (typeof v === 'boolean') {
protects._tab = v;
refresh();
}
return true;
},
get all() {return GM_getValue('all', false);},
set all(v) {
if (typeof v === 'boolean') {
GM_setValue('all', v);
refresh();
}
return true;
},
};
//GM_addValueChangeListener('all', function(name, old_value, new_value, remote) {onclick('all');})
refresh();
function onclick(type) {
debugger;
protects[type] = !protects[type];
}
function refresh() {
(protects.tab || protects.all) && !protects.protected && protect();
!protects.tab && !protects.all && protects.protected && unprotect();
refreshMenuCommand();
}
function refreshMenuCommand() {
id_tab && GM_unregisterMenuCommand(id_tab);
id_all && GM_unregisterMenuCommand(id_all);
id_tab = GM_registerMenuCommand(CONST.Text[protects.tab ? 'Unprotect_Tab' : 'Protect_Tab'], onclick.bind(null, 'tab'));
id_all = GM_registerMenuCommand(CONST.Text[protects.all ? 'Unprotect_All' : 'Protect_All'], onclick.bind(null, 'all'));
}
function protect() {
unsafeWindow.addEventListener('beforeunload', onBeforeUnload);
protects.protected = true;
}
function unprotect() {
unsafeWindow.removeEventListener('beforeunload', onBeforeUnload);
protects.protected = false;
}
function onBeforeUnload(event) {
event.preventDefault();
event.returnValue = '';
}
})();