跳转到内容

MediaWiki:Gadget-AudioText.js

来自电棍ottowiki
OctoberSama留言 | 贡献2025年5月24日 (六) 22:50的版本

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-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(', ')}`);
    });

})();