// ==UserScript== // @name Aerfaying Explore - 阿儿法营/稽木世界社区优化插件 // @namespace waterblock79.github.io // @version 1.5.6 // @description 提供优化、补丁及小功能提升社区内的探索效率和用户体验 // @author waterblock79 // @match http://gitblock.cn/* // @match https://gitblock.cn/* // @match http://aerfaying.com/* // @match https://aerfaying.com/* // @match http://3eworld.cn/* // @match https://3eworld.cn/* // @icon https://gitblock.cn/Content/logo.ico // @grant none // @license MIT // @downloadURL none // ==/UserScript== /* aerfaying-explore 是一个非官方的、针对阿儿法营/稽木世界社区的开源优化插件 https://github.com/waterblock79/aerfaying-explore */ (function () { 'use strict'; const version = '1.5.6'; // $(selector) // 即 document.querySelectorAll(selector) const $ = (selector) => document.querySelectorAll(selector); // addSelectorEvent(selector, event, callback) // 为全部符合 selector 选择器的元素自动添加 event 事件,若该事件被触发就会执行 callback 回调 let eventElement = []; const addSelectorEvent = (selector, event, callback) => { if (Array.isArray(event)) { for (let i in event) { addSelectorEvent(selector, event[i], callback); } return; } eventElement.push({ selector: selector, event: event, callback: callback, handledElements: [] }) } window.addSelectorEvent = addSelectorEvent; // addFindElement(selector, callback) // 当选择器发现新的符合 selector 的元素就执行 callback,callback 会传入该元素。 let findElement = []; const addFindElement = (selector, callback) => { findElement.push({ selector: selector, callback: callback, handledElements: [] }) // 此处返回该任务在 findElement 中的 index,方便后续删除该任务。 return findElement.length - 1; }; window.addFindElement = addFindElement; // addHrefChangeEvent(callback) // 当页面 location.href 改变触发该事件 let lastHref = null; let hrefChangeEvent = []; const addHrefChangeEvent = (callback) => { hrefChangeEvent.push({ callback: callback, }); }; // →_→ // 通过 setInterval 实现 addFindElement 和 addSelectorEvent。 setInterval(() => { // addFindElement findElement.forEach((item) => { $(item.selector).forEach((element) => { if (!item.handledElements.find(e => e == element)) { item.callback(element); item.handledElements.push(element); } }) }) // addSelectorEvent eventElement.forEach((item) => { $(item.selector).forEach((element) => { if (!item.handledElements.find(e => e == element)) { element.addEventListener(item.event, item.callback); item.handledElements.push(element); } }) }); // addHrefChangeEvent if (lastHref != location.href) { hrefChangeEvent.forEach((item) => { item.callback(location.href); }); } lastHref = location.href; }, 16); // addStyle(css) // 将 CSS 塞到