您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Updater Function
// ==UserScript== // @name Includes : Updater // @description Updater Function // @author You // @version 1.0 // @include nowhere // @exclude * // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_getResourceText // @namespace https://greasyfork.org/users/1385333 // ==/UserScript== /************************************************************************** Author's NOTE This script was made from scratch. Based on https://userscripts-mirror.org/scripts/show/52251 (by Buzzy) *************************************************************************** This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. **************************************************************************/ // for compatibility only var Updater = {}; (function () { // script scope var parseHeader = function (text) { var output = {"resources" : {}, "histories" : {}}, re = /^\/\/ @([\w:]+)\s+(.+)$/gm, item; while (item = re.exec(text)) { var k = item[1].toLowerCase(); if ("resource" == k) { if (/^([\w:.]+)\s+(.+)/.test(item[2])) { output.resources[RegExp.$1] = RegExp.$2; } } else if ("history" == k) { if (/^([\w:.]+)\s+(.+)/.test(item[2])) { if (RegExp.$1 in output.histories) { output.histories[RegExp.$1].push(RegExp.$2); } else { output.histories[RegExp.$1] = [RegExp.$2]; } } } else { if (~["include", "exclude"].indexOf(k)) { k += "s"; } else if (~["match"].indexOf(k)) { k += "es"; } if (k in output) { if (!(output[k] instanceof Array)) { output[k] = [output[k]]; } output[k].push(item[2]); } else { output[k] = item[2]; } } } return output; }; if (GM_getValue("cfuw_enabled", true)) { (function recursive (new_header) { var last = Date.parse(GM_getValue("cfuw_last_check", "Sat Oct 9 2010 20:10:26 GMT-0300")), curr = new Date(), interval = 86400000; // 24 * 60 * 60 * 1000 = 1 day if (curr - interval > last) { var old_header = null; try { old_header = parseHeader(GM_getResourceText("meta")); } catch (e) { console.warn('Resource META is required for the script "' + GM_info.script.name + '".\nUpdate checking was ignored!'); } if (old_header) { GM_setValue("cfuw_last_check", (last = new Date(curr - interval + 310000)).toString()); function nextstep(new_header) { var parent = document.createElement("div"), params = { "id" : old_header["uso:script"] || "", "name" : old_header.name || "", "old_version" : old_header.version || old_header["uso:version"] || I18n.get("cfuw.version.unknown"), "new_version" : new_header.version || new_header["uso:version"] || I18n.get("cfuw.version.unknown"), "history" : "", "i18n.title" : I18n.get("cfuw.title"), //New version available for "i18n.cversion" : I18n.get("cfuw.cversion.label"), //Current version "i18n.lversion" : I18n.get("cfuw.lversion.label"), //Lastest version "i18n.install" : I18n.get("cfuw.install.label"), // Install "i18n.visit" : I18n.get("cfuw.visit.label"), // Visit "i18n.cancel" : I18n.get("cfuw.cancel.label"), // Cancel "i18n.disable" : I18n.get("cfuw.disable.label"), // Don't ask me again for this script }; for (var key in old_header.histories) { if (key in new_header.histories) { delete new_header.histories[key]; } } for (var key in new_header.histories) { params.history += "<span>" + key + "</span><ul>"; // Update 'for each' to 'for...of' for (let item of new_header.histories[key]) { params.history += "<li>" + item + "</li>"; } params.history += "</ul>"; } parent.innerHTML = GM_getResourceText("updaterWindowHtml").replace(/{([\w.]+)}/g, function ($0, $1) { return ($1 in params ? params[$1] : $0) }); document.body.appendChild(parent); var closeWin = setTimeout(function (w) { if (w) { w.parentNode.removeChild(w); } }, 120000, parent), win = "id('cfuw_" + old_header["uso:script"] + "')"; if (params.history.length) { xpath(win + "//div[@class='history']")[0].style.visibility = "visible"; } if (old_header.name + old_header.namespace != new_header.name + new_header.namespace) { xpath(win + "//a[contains(@class,'install')]")[0].addEventListener("click", function (e) { I18n.get("cfuw.uninstall.msg.error", alert); // The script name/namespace has changed.\nYou will need to uninstall the old version manually. }, true); } // Update 'for each' to 'for...of' for (let btn of xpath(win + "//a[contains(@class,'close')]")) { btn.addEventListener("click", function (e) { parent.parentNode.removeChild(parent); clearTimeout(closeWin); GM_setValue("cfuw_last_check", new Date().toString()); }, false); } xpath(win+"//td[@class='disable']/input")[0].addEventListener("click", function (e) { GM_setValue("cfuw_enabled", !e.target.checked); }, false); setTimeout(recursive, last - curr + interval, new_header); } if (new_header) { nextstep(new_header); } else { GM_xmlhttpRequest({ "method" : "get", "url" : old_header.resources.meta, "onerror" : function (xhr) { setTimeout(recursive, last - curr + interval); }, "onload" : function (xhr) { var new_header = parseHeader(xhr.responseText), curr = new Date(); if (/^2/.test(xhr.status) && "" + old_header["uso:hash"] != "" + new_header["uso:hash"]) { GM_addStyle(GM_getResourceText("updaterWindowCss")); nextstep(new_header); } else { GM_setValue("cfuw_last_check", curr.toString()); setTimeout(recursive, interval); } } }); } } } else { setTimeout(recursive, last - curr + interval); } }()); } }());