Я пытаюсь поддерживать заброшенное расширение MediaWiki, но понял, что это не так просто.
Я разветвил его на github https://github.com/slim16165/Semantic-MediaWiki-Graph и попытался заставить MW загрузить базовый javascript, который определяет JS mw.util
PHP-код
$wgOut->addModules(['mediawiki', 'mediawiki.base', 'mw.util']);
//$wgOut->addScriptFile("{$wgScriptPath}/resources/src/mediawiki.base/mediawiki.base.js");
$wgOut->addScriptFile("{$wgScriptPath}/extensions/SemanticMediaWikiGraph/includes/js/d3_v4.min.js");
$wgOut->addScriptFile("{$wgScriptPath}/extensions/SemanticMediaWikiGraph/includes/js/utility.js");
$wgOut->addScriptFile("{$wgScriptPath}/extensions/SemanticMediaWikiGraph/includes/js/app.js");
JS-ошибка
jquery-3.6.3.js:4114 jQuery.Deferred exception: mw is not defined ReferenceError: mw is not defined
at HTMLDocument.<anonymous> (https://www.tematichedigenere.com/extensions/SemanticMediaWikiGraph/includes/js/utility.js:3:5)
at mightThrow (https://code.jquery.com/jquery-3.6.3.js:3830:29)
at process (https://code.jquery.com/jquery-3.6.3.js:3898:12) undefined
Тестирование расширения на моей вики: ссылка на тестовую страницу
Эти модули всегда загружены. Код, вероятно, запускается слишком рано. В идеале вы должны переписать расширение для использования модулей ResourceLoader и объявить зависимость от mediawiki.util
; менее идеально, вы можете просто обернуть сценарии в обработчик загрузки, чтобы они выполнялись после того, как все остальное.
Я только что понял, что предыдущий автор каким-то образом включил файлы js в модуль github.com/slim16165/Semantic-MediaWiki-Graph/blob/main/… не достаточно ли их загрузить?
@Revious, вероятно, стоит отдельного вопроса, потому что это трудно обсуждать в комментариях, но да, нормальный шаблон заключается в том, что вы определяете модуль, а затем используете $wgOut->addModule()
. См. mediawiki.org/wiki/ResourceLoader/…
Большое спасибо за ответ. Я только что понял, что способ, которым я пытался загрузить свой скрипт, предназначался только для внутреннего использования, теперь я пытаюсь загрузить их с помощью ResourceLoader, но он тоже не работает... Я собирался открыть новый вопрос: «В расширении MediaWiki в файле PHP, который определяет класс, расширяющий SpecialPage, я добавляю в глобальную переменную $wgOut пользовательский модуль, но он не загружается через вызов load.php»