1

我运行一个使用Topbar 扩展的 MediaWiki 站点。我最近将安装从 MediaWiki 的主分支升级到了最前沿的版本:1.28.0-alpha (91e56cc) 版本。

之后,Topbar 扩展不再起作用:

  • 通常,topbar div 根本不被插入。
  • 有时,顶栏 div 会出现,但链接不起作用。

后一个问题可能是我的 CSS 的问题(我不知道),但间歇性行为与我有关。因此,首要任务是确保每次至少出现 topbar div。

这个扩展只是一个小的 javascript,它应该在页面加载时运行,在顶部 () 附近添加一块 HTML <div id="mw-writh-topbar" ...>。它使用 jQuery 函数来做到这一点。

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

以下是我所知道的:

  • 没有 500 服务器错误,PHP 没有明显的问题。
  • 在我调查的早期的某个时候,开发者控制台有时会抱怨Uncaught ReferenceError: jQuery is not defined,但我现在无法再重现它了。研究模糊地表明这可能是因为扩展没有使用新的 ResourceLoader 机制,所以我尝试迁移 Topbar 以使用 ResourceLoader 机制(通过maintenance/convertExtensionToRegistration.php,然后wfLoadExtension('Topbar')in LocalSettings.php),但似乎没有任何区别。
  • Topbar 钩子似乎被调用,因为css/Topbar.css被添加到页面中。但我不知道是否js/Topbar.js曾经运行过,如果是这样,会发生什么。

那么:我该如何调试呢?

4

1 回答 1

1

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

这样做的说明在这里:

两个注意事项:

  1. 从 MediaWiki 1.25 开始,扩展应该使用所谓的“扩展注册”而不是遵循上述手册,但这可能需要更多的工作和专业知识。
  2. 丑陋的黑客警告:您可以忽略所有这些,只需使用RLQ.push( function(){ /* All of the code here */ } );. 这会将其全部推入 ResourceLoader 的队列,因此它将在 jQuery 可用后加载。我不推荐这个,但为了完整起见在这里展示它。
于 2016-05-25T22:10:30.890 回答