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() { alert("🔌 Gadget脚本开始执行"); if (typeof mw === 'undefined' || !mw.loader) { alert("❌ 未检测到MediaWiki核心对象"); return; } mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() { alert("✅ 依赖加载完成"); const init = function() { try { alert("🚀 进入主初始化流程"); // 新增:定义核心处理函数 const handleClick = async (element) => { try { alert("🔄 进入点击处理流程"); // 获取音频文件名 const audioFile = element.dataset.audioFile; alert("📂 模板参数: " + audioFile); // 获取真实URL const apiUrl = mw.util.wikiScript('api') + '?action=query&titles=' + encodeURIComponent(audioFile) + '&prop=imageinfo&iiprop=url&format=json'; alert("🌐 请求API: " + apiUrl); const response = await fetch(apiUrl); if (!response.ok) throw new Error("API请求失败: " + response.status); 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}`); } }; // 事件绑定 const bindEvents = function() { const elements = document.querySelectorAll('.audio-trigger'); if (elements.length === 0) { alert("⚠️ 未找到音频触发元素"); return; } elements.forEach(element => { if (element._bound) return; element._bound = true; const handler = async (event) => { event.preventDefault(); alert("🖱️ 点击事件触发"); await handleClick(element); }; element.addEventListener('click', handler); element.addEventListener('touchstart', handler); alert("🔗 元素事件已绑定"); }); }; // 初始化触发 if (document.readyState === 'complete') { alert("⚡ 直接初始化"); bindEvents(); } else { alert("⏳ 等待DOM加载"); document.addEventListener('DOMContentLoaded', bindEvents); } mw.hook('wikipage.content').add(bindEvents); } catch (e) { alert(`💣 初始化崩溃: ${e.message}`); } }; init(); }, function(error) { alert(`🚫 依赖加载失败: ${error}`); }); })();