您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
文章阅读页面,点击单词显示释义的同时自动发音该单词
// ==UserScript== // @name 扇贝阅读单词自动发音 // @namespace http://tampermonkey.net/ // @version 2024-05-17 // @description 文章阅读页面,点击单词显示释义的同时自动发音该单词 // @author CTRN43062 // @match https://web.shanbay.com/reading/web-news/articles/* // @icon https://www.google.com/s2/favicons?sz=64&domain=shanbay.com // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; let wordCardObs = null; const metaInfo = document.querySelector('.meta-info') // Your code here... const obs = new MutationObserver((mutationsList) => { for(const m of mutationsList) { if(m.type === 'childList') { const { addedNodes, removedNodes } = m if(addedNodes.length === 1 && addedNodes[0].className === 'word-card') { const wordCard = addedNodes[0] wordCard.querySelector('.volume').click() wordCardObs = new MutationObserver((mutationList) => { for(const m of mutationList) { if(m.type === 'attributes') { setTimeout(() => metaInfo.querySelector('.volume').click(), 200) } } }) wordCardObs.observe(wordCard, { 'attributes': true }) } else if (removedNodes.length === 1 && removedNodes[0].className === 'word-card' && wordCardObs) { wordCardObs.disconnect() } } } }) obs.observe(metaInfo, { childList: true, subtree:true}) })();