Este script não deve ser instalado diretamente. Este script é uma biblioteca de outros scripts para incluir com o diretório meta // @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;
- });
- });
- }