MediaWiki:Gadget-AudioText.js:修订间差异
外观
![]() OctoberSama(留言 | 贡献) 小 |
![]() OctoberSama(留言 | 贡献) 小 |
||
第1行: | 第1行: | ||
// MediaWiki:Gadget-AudioText.js | // MediaWiki:Gadget-AudioText.js | ||
(function() { | (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("🚀 进入主初始化流程"); | |||
const | // 阶段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(', ')}`); | |||
}); | }); | ||
})(); | })(); |
2025年5月24日 (六) 22:50的版本
// 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(', ')}`); }); })();