MediaWiki:Gadget-AudioText.js
外观
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
// MediaWiki:Gadget-AudioText.js (function() { // 阶段1:全局加载确认 alert("🎯 Gadget脚本已注入页面!"); // 阶段2:依赖加载 mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() { alert("🔋 核心依赖已加载:mediawiki.util/mediawiki.api"); // 阶段3:定义全局处理器 window.handleAudioClick = async function(element) { try { alert("🖱️ 点击事件进入处理流程"); // 获取音频文件参数 const audioFile = element.dataset.audioFile; alert("🗃️ 模板参数:" + audioFile); // API请求 const apiUrl = mw.util.wikiScript('api') + '?action=query&format=json&titles=' + encodeURIComponent(audioFile) + '&prop=imageinfo&iiprop=url'; alert("📡 请求API:" + apiUrl); const response = await fetch(apiUrl); const data = await response.json(); const pages = data.query.pages; const pageId = Object.keys(pages)[0]; const audioUrl = pages[pageId].imageinfo[0].url; alert("🔗 解析音频URL:" + audioUrl); // 播放逻辑 const audio = new Audio(audioUrl); audio.play().then(() => { alert("✅ 播放成功!"); }).catch(e => { alert("❌ 播放失败:" + e.message); }); } catch(e) { alert(`💥 发生未捕获异常:${e.message}`); } }; // 阶段4:绑定事件(强化版) function bindAudioEvents() { const elements = document.querySelectorAll('.audio-trigger'); if (elements.length === 0) { alert("⚠️ 未找到任何.audio-trigger元素!"); return; } elements.forEach(element => { if (element._audioBound) return; element._audioBound = true; // 桌面端点击 element.addEventListener('click', function(e) { e.preventDefault(); window.handleAudioClick(element); }); // 移动端触摸 element.addEventListener('touchstart', function(e) { e.preventDefault(); window.handleAudioClick(element); }, { passive: false }); alert("🔌 已为元素绑定事件:" + element.textContent); }); } // 阶段5:双重初始化 if (document.readyState === 'complete') { alert("⚡ 立即初始化已有内容"); bindAudioEvents(); } else { alert("⏳ 等待DOM加载完成"); document.addEventListener('DOMContentLoaded', bindAudioEvents); } // 动态内容监听 mw.hook('wikipage.content').add(function() { alert("🔄 检测到新内容加载"); bindAudioEvents(); }); }, function(error) { alert(`🚨 依赖加载失败:${error}`); }); })();