我运行一个使用Topbar extension的MediaWiki网站。我最近从MediaWiki的主分支将安装升级到最新版本:1.28.0-alpha(91e56cc)。
之后,Topbar扩展不再起作用:
通常,根本不会插入topbar div。
有时会出现topbar div,但是链接不起作用。
后一个问题可能是我的CSS出现问题(我不知道),但是间歇性行为使我担心。因此,首要任务是确保至少每次都显示topbar div。
此扩展名只是一个小的javascript,应在页面加载时运行,以在顶部(<div id="mw-writh-topbar" ...>
)附近添加HTML块。这样做using a jQuery function。
不幸的是,我并不是真正的Web开发人员,所以即使这个简单的例程也让我有些头疼。
这是我所知道的:
没有500个服务器错误,PHP没有明显的问题。
在我调查初期的某个时候,开发者控制台有时会抱怨Uncaught ReferenceError: jQuery is not defined
,但是我现在无法重现它。研究vaguely suggested可能是因为扩展名未使用新的ResourceLoader机制,所以我尝试了migrate Topbar to use the ResourceLoader mechanism(通过maintenance/convertExtensionToRegistration.php
,然后在wfLoadExtension('Topbar')
中使用LocalSettings.php
),但似乎没有什么区别。
Topbar挂钩似乎被调用了,因为css/Topbar.css
已添加到页面中。但是我不知道js/Topbar.js
是否运行过,如果发生了,会发生什么情况。
所以:我该如何调试呢?
最佳答案
您需要转换代码以使用ResourceLoader-当前,该扩展使用OutputPage的addScriptFile()添加了代码,并且仅假设jQuery在运行时将可用。从MediaWiki 1.26开始,所有内容都是异步加载的,因此这是行不通的,因此需要将其转换为新系统。
这样做的说明在这里:
https://www.mediawiki.org/wiki/ResourceLoader/Migration_guide_for_extension_developers
https://www.mediawiki.org/wiki/ResourceLoader/Developing_with_ResourceLoader#Registering
两个注意事项:
从MediaWiki 1.25开始,扩展应该使用所谓的“ extension registration”而不是遵循上述手册,但这可能需要更多的工作和专业知识。
骇客的骇客警告:您可以忽略所有这些,而只需使用RLQ.push( function(){ /* All of the code here */ } );
将代码包装在JS文件中即可。这会将它们全部推送到ResourceLoader的队列中,因此它将在jQuery可用后加载。我不建议这样做,但为了完整起见,请在此处显示。