文章阅读页面,点击单词显示释义的同时自动发音该单词
// ==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}) })();