如何让 Topbar 扩展与最新的 MediaWiki 一起工作?
How can I make the Topbar extension work with the newest MediaWiki?
我 运行 一个使用 Topbar extension 的 MediaWiki 站点。我最近从 MediaWiki 的主分支将安装升级到最前沿的版本:版本 1.28.0-alpha (91e56cc)。
之后,Topbar 扩展程序不再有效:
- 通常,顶栏 div 根本不会插入。
- 偶尔会出现顶部栏 div,但链接不起作用。
后一个问题可能是我 CSS 的问题(我不知道),但间歇性行为让我担心。因此,首要任务是确保顶部栏 div 至少每次都出现。
这个扩展只是一个小的 javascript,它应该在页面加载时 运行,在顶部附近添加一大块 HTML (<div id="mw-writh-topbar" ...>
) .这样做 using a jQuery function.
不幸的是,我并不是真正的 Web 开发人员,所以即使是这个简单的例程也有点难以理解。
这是我所知道的:
- 没有 500 个服务器错误,PHP 没有明显的问题。
- 在我调查早期的某个时候,开发者控制台有时会抱怨
Uncaught ReferenceError: jQuery is not defined
,但我现在无法再重现它。研究 vaguely suggested it could be because the extension does not use the new ResourceLoader mechanism, so I tried to migrate Topbar to use the ResourceLoader mechanism(通过 maintenance/convertExtensionToRegistration.php
,然后在 LocalSettings.php
中研究 wfLoadExtension('Topbar')
),但似乎没有任何区别。
- 似乎调用了 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”而不是遵循上述手册,但这可能需要更多的工作和专业知识。
- 丑陋的 hack 警告:您可以忽略所有这些,只需使用
RLQ.push( function(){ /* All of the code here */ } );
将代码包装在 JS 文件中。这会将它全部推入 ResourceLoader 的队列,因此它将在 jQuery 可用后加载。我不推荐这个,但为了完整起见在这里展示它。
我 运行 一个使用 Topbar extension 的 MediaWiki 站点。我最近从 MediaWiki 的主分支将安装升级到最前沿的版本:版本 1.28.0-alpha (91e56cc)。
之后,Topbar 扩展程序不再有效:
- 通常,顶栏 div 根本不会插入。
- 偶尔会出现顶部栏 div,但链接不起作用。
后一个问题可能是我 CSS 的问题(我不知道),但间歇性行为让我担心。因此,首要任务是确保顶部栏 div 至少每次都出现。
这个扩展只是一个小的 javascript,它应该在页面加载时 运行,在顶部附近添加一大块 HTML (<div id="mw-writh-topbar" ...>
) .这样做 using a jQuery function.
不幸的是,我并不是真正的 Web 开发人员,所以即使是这个简单的例程也有点难以理解。
这是我所知道的:
- 没有 500 个服务器错误,PHP 没有明显的问题。
- 在我调查早期的某个时候,开发者控制台有时会抱怨
Uncaught ReferenceError: jQuery is not defined
,但我现在无法再重现它。研究 vaguely suggested it could be because the extension does not use the new ResourceLoader mechanism, so I tried to migrate Topbar to use the ResourceLoader mechanism(通过maintenance/convertExtensionToRegistration.php
,然后在LocalSettings.php
中研究wfLoadExtension('Topbar')
),但似乎没有任何区别。 - 似乎调用了 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”而不是遵循上述手册,但这可能需要更多的工作和专业知识。
- 丑陋的 hack 警告:您可以忽略所有这些,只需使用
RLQ.push( function(){ /* All of the code here */ } );
将代码包装在 JS 文件中。这会将它全部推入 ResourceLoader 的队列,因此它将在 jQuery 可用后加载。我不推荐这个,但为了完整起见在这里展示它。