Greasy Fork is available in English.
IMPORTANT: This function requires your script to have loaded jQuery.
此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/448161/1362731/Beibeijs.js
// ==UserScript== // @name beibei.js // @namespace https://github.com/iibeibei // @version 0.0.7 // @description IMPORTANT: This function requires your script to have loaded jQuery. // @author Beibei // @license GPLv3 // @match *://*/* // ==/UserScript== /** * @description: 一个实用程序函数,用于 Greasemonkey 脚本, 检测和处理 AJAXed 内容 * @param {*} selector_txt 元素选择器 * @param {*} active_host 激活的域名 * @param {*} active_url 激活的页面URL * @param {*} b_wait_once 是否只扫描一次 * @param {*} iframe_selector 是否扫描Frame框架 * @param {*} action_function 找到元素时运行的方法,传送 node, selector_txt, active_host, active_url 四个变量 */ function waitForKeyElements(selector_txt, active_host, active_url, b_wait_once, iframe_selector, js_code, action_function) { if (active_host != '*' && document.domain.split('.').slice(-2).join('.') != active_host) return; var active_url_type = false; if (typeof active_url == 'object') { for (let index = 0; index < active_url.length; index++) { if (window.location.href.indexOf(active_url[index]) > -1) { active_url_type = true; break; } } } else if (typeof active_url == 'string') { if (window.location.href.indexOf(active_url) > -1) active_url_type = true; } if (active_url_type) { var target_nodes, b_targets_found; if (iframe_selector) { target_nodes = $(iframe_selector).contents().find(selector_txt); } else { target_nodes = $(selector_txt); } if (target_nodes && target_nodes.length > 0) { b_targets_found = true; target_nodes.each(function () { var j_this = $(this); var already_found = j_this.data('alreadyFound') || false; if (!already_found) { logPrint(`selector_txt > ${selector_txt} active_host > ${active_host} active_url > ${active_url} b_wait_once > ${b_wait_once} iframe_selector > ${iframe_selector}`); console.log(j_this); var cancel_found = false; if (typeof action_function == 'object') { action_function.forEach((element) => { cancel_found = element(j_this, selector_txt, active_host, active_url, js_code); }); } else if (typeof action_function == 'function') { cancel_found = action_function(j_this, selector_txt, active_host, active_url, js_code); } if (cancel_found) { b_targets_found = false; } else { j_this.data('alreadyFound', true); } } }); } else { b_targets_found = false; } var control_obj = waitForKeyElements.control_obj || {}; var control_key = selector_txt.replace(/[^\w]/g, '_'); var time_control = control_obj[control_key]; if (b_targets_found && b_wait_once && time_control) { clearInterval(time_control); delete control_obj[control_key]; } else { if (!time_control) { time_control = setInterval(function () { waitForKeyElements(selector_txt, active_host, active_url, b_wait_once, iframe_selector, js_code, action_function); }, 300); control_obj[control_key] = time_control; } } waitForKeyElements.control_obj = control_obj; } } function makeGetRequest(url, method = 'GET', data = null) { logPrint(`${method} -> ${url}`); return new Promise((resolve, reject) => { GM_xmlhttpRequest({ url: url, method: method, data: data, onload: function (response) { resolve(response); }, onerror: function (error) { reject(error); }, }); }); } function logPrint(params) { var date_time = $.trim(new Date(new Date().setHours(new Date().getHours() + 8)).toISOString().replace('Z', ' ').replace('T', ' ')); var function_name = new Error().stack.split('\n')[2].trim().split(' ')[1]; console.log(`[${date_time}][DEBUG] ${function_name} - ${params}`); } function sleep(interval) { return new Promise((resolve) => { setTimeout(resolve, interval); }); } function loadMenu(menu_ALL, version_url) { var menu_ID = []; // 如果读取到的值为 null 就写入默认值 for (let i = 0; i < menu_ALL.length; i++) { if (GM_getValue(menu_ALL[i][0]) == null) { GM_setValue(menu_ALL[i][0], menu_ALL[i][3]); } } registerMenuCommand(); // 注册脚本菜单 function registerMenuCommand() { // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单 if (menu_ID.length > menu_ALL.length) { for (let i = 0; i < menu_ID.length; i++) { GM_unregisterMenuCommand(menu_ID[i]); } } // 循环注册脚本菜单 for (let i = 0; i < menu_ALL.length; i++) { menu_ALL[i][3] = GM_getValue(menu_ALL[i][0]); menu_ID[i] = GM_registerMenuCommand(`${menu_ALL[i][3] ? '✅' : '❌'} ${menu_ALL[i][2]}`, function () { menu_switch(`${menu_ALL[i][0]}`, `${menu_ALL[i][1]}`, `${menu_ALL[i][2]}`, `${menu_ALL[i][3]}`); }); } // 加入版本信息 menu_ID[menu_ID.length] = GM_registerMenuCommand(`🏁 当前版本 ${GM_info['script']['version']}`, function () { window.GM_openInTab(version_url, { active: true, insert: true, setParent: true }); }); } //切换选项 function menu_switch(name, ename, cname, value) { if (value == 'false') { // 重新注册脚本菜单,刷新网页 GM_setValue(`${name}`, true); registerMenuCommand(); location.reload(); GM_notification({ text: `「${cname}」已开启\n`, timeout: 3500 }); } else { // 重新注册脚本菜单,刷新网页 GM_setValue(`${name}`, false); registerMenuCommand(); location.reload(); GM_notification({ text: `「${cname}」已关闭\n`, timeout: 3500 }); } // 重新注册脚本菜单 registerMenuCommand(); } } /** * 获取指定的cookie * @param {String} key cookie的key * @returns {String} */ function get_cookie(key) { const cookie = document.cookie.split(';'); for (let i = 0, len = cookie.length; i < len; i++) { const cur = cookie[i].split('='); if (key === cur[0]) { return cur[1]; } } return ''; } function initializationScript() { var $ = window.$; var VueCDN = 'https://lib.baomitu.com/vue/3.2.36/vue.global.prod.min.js'; var ElementPlusCDN = 'https://lib.baomitu.com/element-plus/2.2.2/index.full.min.js'; GM_addStyle(GM_getResourceText('element-plus')); $.getScript(VueCDN, function () { console.log('[' + VueCDN + '] Vue 加载成功'); $.getScript(ElementPlusCDN, function () { console.log('[' + ElementPlusCDN + '] ElementPlus 加载成功'); var ElementPlus = unsafeWindow.ElementPlus; var Vue = unsafeWindow.Vue; }); }); }