您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
to reduce repetition in creating scripts for Tampermonkey support
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/23115/710488/Tampermonkey%20Support%20Library.js
- var tm = {
- addGlobalStyle: function(css) {
- var head, style;
- head = document.getElementsByTagName('head')[0];
- if (!head) { return; }
- style = document.createElement('style');
- style.type = 'text/css';
- style.innerHTML = css;
- head.appendChild(style);
- },
- log: function(msg) {
- console.log('Tampermonkey: ' + msg);
- },
- selectText: function (targetClass) {
- var textToCopy, range;
- try {
- if (document.selection) {
- range = document.body.createTextRange();
- range.moveToElementText(document.getElementsByClassName(targetClass)[0]);
- range.select();
- } else if (window.getSelection) {
- var selection = window.getSelection();
- range = document.createRange();
- range.selectNode(document.getElementsByClassName(targetClass)[0]);
- selection.removeAllRanges();
- selection.addRange(range);
- }
- } catch (err) {
- tm.log('Failed to select text');
- }
- },
- sysFriendly: function(el) {
- var text = $(el).text();
- $(el).text(text.replace(/\/|\:|\<|\>|\\|\||\*|\?/g, '-'));
- },
- ping: function (ip, callback) { // via http://jsfiddle.net/GSSCD/203/
- if (!this.inUse) {
- this.status = 'unchecked';
- this.inUse = true;
- this.callback = callback;
- this.ip = ip;
- var _that = this;
- this.img = new Image();
- this.img.onload = function () {
- _that.inUse = false;
- _that.callback('responded');
- };
- this.img.onerror = function (e) {
- if (_that.inUse) {
- _that.inUse = false;
- _that.callback('error', e);
- }
- };
- this.start = new Date().getTime();
- this.img.src = "http://" + this.ip;
- this.timer = setTimeout(function () {
- if (_that.inUse) {
- _that.inUse = false;
- _that.callback('timeout');
- }
- }, 1500);
- }
- },
- isTagIn: function (targetString, tags) {
- var isFound = false;
- _.each(tags, function scanTarget (tag) {
- if (targetString.toLowerCase().indexOf(tag.toLowerCase()) > -1) {
- isFound = true;
- }
- });
- return isFound;
- },
- copyTextToClipboard: function (text) {
- var copyFrom = document.createElement("textarea");
- copyFrom.textContent = text;
- var body = document.getElementsByTagName('body')[0];
- body.appendChild(copyFrom);
- copyFrom.select();
- document.execCommand('copy');
- body.removeChild(copyFrom);
- },
- showModal: function(modalId, modalBody) {
- if ($('#' + modalId).is(":visible")) {
- $('#' + modalId).remove();
- } else {
- $('body').append('<div class="popupDetailWindow" id="' + modalId + '">' +
- ' <div class="popupDetailTitle"> </div>' +
- ' <div class="popupDetailContent fingery" style="text-align:right;" onclick="$(this).parent().remove()">[CLOSE]</div>' +
- ' ' + modalBody +
- '</div>');
- }
- },
- waitTimers: [],
- getContainer: function (opts) {
- var options = {
- id: opts.id ? opts.id : opts.el.replace(/[ (:)]/g, ''),
- el: opts.el,
- try: 0,
- max: opts.max ? opts.max : 20,
- spd: opts.spd ? opts.spd : 500
- };
- clearTimeout(tm.waitTimers[options.id]);
- return new Promise(function (resolve, reject) {
- tm.waitForContainerElement(resolve, options);
- });
- },
- waitForContainerElement: function (resolve, options) {
- var $configElement = $(options.el);
- if ($configElement.length === 0) {
- options.try++;
- if (options.try < options.max) {
- tm.waitTimers[options.id] = setTimeout(tm.waitForContainerElement.bind(this, resolve, options), options.spd);
- } else {
- $('#output').val($('#output').val() + 'Maximum searches reached\n');
- }
- } else {
- resolve($configElement);
- }
- },
- savePreferences: function (name, value) {
- GM_setValue(name, JSON.stringify(value));
- },
- erasePreferences: function(name) {
- GM_setValue(name, JSON.stringify({}));
- },
- setTamperIcon: function (global) {
- var scriptName = global.scriptName,
- prefsName = global.prefsName,
- prefs = global.prefs,
- notes = global.notes;
- if (!scriptName || !prefsName || !prefs) {
- tm.log('setTamperIcon not properly configured; please send entire global object');
- return;
- }
- // Add Tampermonkey Icon with label to identify this script
- if($('.tamperlabel').length > 0) {
- if ($('.tamperlabel').prop('title').indexOf(scriptName) === -1) {
- $('.tamperlabel').prop('title', $('.tamperlabel').prop('title') + ' | ' + scriptName);
- }
- } else {
- $('body').append('<span class="tamperlabel" title="Tampermonkey scripts: ' + scriptName + '"></span>');
- }
- if (prefsName != null && prefs != null) {
- var tamperAction = function () {
- var modalId = scriptName.replace(/\s/g, '') + 'Options',
- modalBody = '';
- _.each(prefs, function (value, key) {
- if (Array.isArray(value) || typeof value === 'string' || typeof value === 'number') {
- modalBody += ' <div class="popupDetailTitle">' + key + '</div><div class="popupDetailContent"><input style="width:100%" id="' + key + '" type="text" value="' + value + '"></input></div>';
- } else {
- _.each(value, function (value2, key2) {
- modalBody += ' <div class="popupDetailTitle">' + key2 + '</div><div class="popupDetailContent"><input style="width:100%" id="' + key2 + '" type="text" value="' + value2 + '"></input></div>';
- });
- }
- });
- if (notes != null) {
- modalBody += ' <div class="popupDetailTitle"> </div><div class="popupDetailContent" style="margin-top:20px;"> </div>';
- _.each(notes.messages, function(note) {
- modalBody += ' <div class="popupDetailTitle">NOTE:</div><div class="popupDetailContent">' + note + '</div>';
- });
- }
- modalBody += '<div class="popupDetailTitle"> </div><div class="popupDetailContent" style="text-align:right;">' +
- ' <button class="savery">Save</button>' +
- ' <button class="resetery">Reset</button>' +
- ' <button class="uiClosify">Close</button>' +
- '</div>';
- tm.showModal(modalId, modalBody);
- // hide the default popup Close because for some weird reason it's not working
- $('.popupDetailContent.fingery').hide();
- $('.savery').on('click', function() {
- _.each(prefs, function(value, key) {
- prefs[key] = $('#' + key).val();
- });
- tm.savePreferences(prefsName, prefs);
- alert('Refresh to see new values.');
- });
- $('.resetery').on('click', function() {
- tm.erasePreferences(prefsName);
- alert('Refresh to see default values.');
- });
- $('.uiClosify').on('click', function() {
- $('#' + modalId).remove();
- });
- return false;
- };
- $('.tamperlabel').unbind('click').click(tamperAction);
- }
- },
- checkNotes: function(global) {
- if (global.notes == null) {
- global.notes = {
- messages: [],
- notifiedCount: 0
- };
- }
- if (global.notes.messages.length !== global.notes.notifiedCount) {
- global.notes.notifiedCount = global.notes.messages.length;
- var blinkNotify = function() {
- if ($('.tamperlabel').css('background-color') === 'rgb(255, 0, 0)') {
- $('.tamperlabel').css('background-color', 'transparent');
- } else {
- $('.tamperlabel').css('background-color', 'rgb(255, 0, 0)');
- }
- }
- setTimeout(function() {
- for (var intI = 0; intI < 4; intI ++) {
- setTimeout(blinkNotify, 1000 * intI);
- };
- }, 3000);
- }
- }
- };