您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This script is intended to work with @require only. Provides class AutomatedElementTextNotifier
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/438801/1019653/UserScript%20Automated%20Element%20Text%20Notifier.js
- // ==UserScript==
- // @namespace Xortrox/UserScripts/AutomatedElementTextNotifier
- // @name UserScript Automated Element Text Notifier
- // @version 0.7
- // @description This script is intended to work with @require only. Provides class AutomatedElementTextNotifier
- // @author Xortrox,
- // @match *
- // @esversion: 6
- // @license MIT
- // ==/UserScript==
- class AutomatedElementTextNotifier {
- constructor(options) {
- this.icon = options.icon || '';
- this.title = options.title || 'No Title Specified';
- this.selector = options.selector;
- /** How frequently to scan for changes on the website (in milliseconds) */
- this.notificationInterval = options.interval;
- /**
- * Every includes/excludes does a check for selector matched element's "innerText" value
- * Each entry will be checked in priority from top to bottom and only the first match will send its notification
- * All configs must have an includes entry, while exclusion is optional.
- * */
- this.scanConfiguration = options.config;
- if (!this.selector) {
- this.error('Error: No selector specified for AutomatedElementTextNotifier');
- }
- }
- async init() {
- await window.UserScript.Notifications.askPermission();
- this.interval = setInterval(this.scan, this.notificationInterval);
- }
- scan = () => {
- const notificationElements = document.querySelectorAll(this.selector);
- /** We send notification only once if any adventures are claimable */
- if (notificationElements && notificationElements.length > 0) {
- let notified = false;
- for (let element of notificationElements) {
- if (notified) {
- break;
- }
- const text = element.innerText;
- const textLower = text.toLowerCase();
- for (const config of this.scanConfiguration) {
- let includesText = false;
- let excludesText = false;
- for (const includeText of config.includes) {
- if (textLower.includes(includeText)) {
- includesText = true;
- break;
- }
- }
- if (config.excludes?.length > 0) {
- for (const excludeText of config.excludes) {
- if (!textLower.includes(excludeText)) {
- excludesText = true;
- break;
- }
- }
- }
- let canShowNotification = includesText;
- if (config.excludes?.length > 0) {
- canShowNotification = canShowNotification && excludesText;
- }
- if (canShowNotification) {
- window.UserScript.Notifications.notify(this.title, config.notificationText, this.icon);
- notified = true;
- break;
- }
- }
- }
- }
- }
- error(error) {
- alert(error);
- console.error(new Error(error));
- }
- }