如何使Topbar扩展与最新的MediaWiki一起使用?

时间:2016-05-24 20:28:29

标签: javascript jquery mediawiki mediawiki-extensions resource-loading

我运行使用Topbar extension的MediaWiki网站。我最近将安装升级到MediaWiki主分支的最新版本:版本1.28.0-alpha(91e56cc)。

之后,Topbar扩展程序不再有效:

  • 通常,顶部div根本没有插入。
  • 偶尔会出现顶部栏div,但链接无效。

后一个问题可能是我的CSS问题(我不知道),但间歇性的行为让我感到担忧。因此,第一项业务是确保每次都至少出现topbar div。

这个扩展只是一个小的javascript,应该在页面加载时运行,在顶部(F)附近添加一大块HTML。它这样做using a jQuery function

不幸的是,我不是一个真正的Web开发人员,所以即使是这个简单的例程也有点过头了。

这就是我所知道的:

  • 没有500个服务器错误,没有明显的PHP问题。
  • 在调查初期的某个时刻,开发者控制台有时会抱怨<div id="mw-writh-topbar" ...>,但我现在不能重现它了。研究vaguely suggested可能是因为扩展程序没有使用新的ResourceLoader机制,因此我尝试migrate Topbar to use the ResourceLoader mechanism(通过Uncaught ReferenceError: jQuery is not defined,然后maintenance/convertExtensionToRegistration.php wfLoadExtension('Topbar')但它似乎没有任何区别。
  • 似乎调用了Topbar挂钩,因为LocalSettings.php被添加到页面中。但我不知道css/Topbar.css是否曾经运行过,如果是的话,会发生什么。

那么:我该怎么调试呢?

1 个答案:

答案 0 :(得分:1)

您需要将代码转换为使用ResourceLoader - 当前扩展使用OutputPage的addScriptFile()添加代码,并且假设jQuery在运行时可用。从MediaWiki 1.26开始,所有内容都异步加载,因此不起作用,因此需要将其转换为新系统。

这样做的说明如下:

两个注释:

  1. 从MediaWiki 1.25开始,扩展应该使用所谓的“extension registration”,而不是遵循上述手册,但这可能需要更多的工作和专业知识。
  2. 丑陋的黑客警告:你可以忽略所有这些,只需使用RLQ.push( function(){ /* All of the code here */ } );将代码包装在JS文件中。这将它全部推送到ResourceLoader的队列中,因此它将在jQuery 可用之后加载。我不推荐这个,但为了完整起见,请在此处显示。