您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Confirm before closing a web page with modified textareas
- // ==UserScript==
- // @name Protect Textarea
- // @namespace http://www.arantius.com/
- // @description Confirm before closing a web page with modified textareas
- // @include *
- // @exclude http*://*mail.google.com/*
- // @version 0.0.1.20190827001948
- // ==/UserScript==
- // based on code by Anthony Lieuallen
- // and included here with his gracious permission
- // http://www.arantius.com/article/arantius/protect+textarea/
- //indicator to skip handler because the unload is caused by form submission
- var _pt_skip=false;
- var real_submit = null;
- //find all textarea elements and record their original value
- var els=document.evaluate('//textarea',
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var el=null, i=0; el=els.snapshotItem(i); i++) {
- var real_el = el.wrappedJSObject || el;
- real_el._pt_orig_value=el.value;
- }
- //if i>0 we found textareas, so do the rest
- if (i == 0) { return; }
- //this function handles the case where we are submitting the form,
- //in this case, we do not want to bother the user about losing data
- var handleSubmit = function() {
- _pt_skip=true;
- return real_submit();
- }
- //this function will handle the event when the page is unloaded and
- //check to see if any textareas have been modified
- var handleUnload = function() {
- if (_pt_skip) { return; }
- var els=document.getElementsByTagName('textarea');
- for (var el=null, i=0; el=els[i]; i++) {
- var real_el = el.wrappedJSObject || el;
- if (real_el._pt_orig_value!=el.value) {
- return 'You have modified a textarea, and have not ' +
- 'submitted the form.';
- }
- }
- }
- // trap form submit to set flag
- real_submit = HTMLFormElement.prototype.submit;
- HTMLFormElement.prototype.submit = handleSubmit;
- window.addEventListener('submit', handleSubmit, true);
- // trap unload to check for unmodified textareas
- unsafeWindow.onbeforeunload = handleUnload;