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:检测Gadget是否被加载 alert("🔌 Gadget脚本开始执行"); // 最基础提示,确认脚本被加载 // 阶段2:声明依赖并验证mw对象 if (typeof mw === 'undefined' || !mw.loader) { alert("❌ 致命错误:未检测到MediaWiki核心对象"); return; } // 阶段3:加载必需依赖 mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() { alert("✅ 依赖加载完成:mediawiki.util/mediawiki.api"); // 依赖加载确认 // 阶段4:主初始化函数 const init = function() { try { alert("🚀 进入主初始化流程"); // 阶段5:绑定事件 const bindEvents = function() { const elements = document.querySelectorAll('.audio-trigger'); if (elements.length === 0) { alert("⚠️ 未找到.audio-trigger元素,请检查模板调用"); return; } elements.forEach(element => { if (element._bound) return; element._bound = true; // 强制绑定双事件 const handler = () => { alert("🖱️ 事件触发!开始处理..."); handleClick(element).catch(e => { alert(`💥 处理异常: ${e.message}`); }); }; element.addEventListener('click', handler); element.addEventListener('touchstart', handler); alert("🔗 已为元素绑定事件"); // 每个元素绑定确认 }); }; // 阶段6:双重初始化机制 if (document.readyState === 'complete') { alert("⚡ 文档已加载完成,立即初始化"); bindEvents(); } else { alert("⏳ 注册DOMContentLoaded监听"); document.addEventListener('DOMContentLoaded', bindEvents); } // 阶段7:动态内容处理 mw.hook('wikipage.content').add(function() { alert("🔄 检测到动态内容加载,重新初始化"); bindEvents(); }); } catch (e) { alert(`💣 初始化崩溃: ${e.message}\n${e.stack}`); } }; // 启动初始化 init(); }, function(error) { alert(`🚫 依赖加载失败: ${error.map(e => e.message).join(', ')}`); }); })();