Mediawiki 1.27.4 jquery не загружен - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в Mediawiki и Resourceloader.Я недавно скачал версию MediaWiki 1.27.4 LTS и при установке обнаружил, что даже если они говорят, что jquery загружается по умолчанию, его нигде не найти (я просматриваю вкладку источников в инструментах разработчика Chrome).В одном из моих расширений, использующем хук BeforePageDisplay, я хотел использовать jquery.cookie, поэтому я объявил следующий загрузчик ресурсов

$wgResourceModules['ext.myFirstExtension'] = array(           
        'dependencies' => array( 'jquery.cookie'),            
        'localBasePath' => dirname( __FILE__ ),            
        'remoteExtPath' => 'myFirstExtension',
        'position' => 'top'
);

И в своем файле расширений я загружаю один из классов, в котором яЯ выполняю В скрипте, я просто выполняю следующий код, и он выдает мне типичную ошибку $ undefined, так как jquery не загружен.

$(document).ready(function(){
alert("here");
});

И да, я использую скин Vector без каких-либомодификаций.Кроме того, я не использую никаких других расширений, кроме VisualEditor, и он прекрасно работает.

Я также попробовал mw.loader.load ('jquery') в my, и он также жалуется, что mw не распознается.

Я также добавил $ wgResourceLoaderDebug = true;в моих локальных настройках, чтобы загрузчик ресурсов не связывал мои скрипты и css

Я подозреваю, что Mediawiki внутренне не может функционировать без jquery ... но теперь, как я могу заставить jquery загружаться в мое расширение правильно, чтобыЯ могу использовать jquery.cookie.

Спасибо

Ответы [ 3 ]

0 голосов
/ 26 мая 2018

JQuery будет загружен только при наличии кода JQuery, который должен быть выполнен в Common.js или на пользовательской странице vector.js пользователя.

Перед импортом любых внешних библиотек необходимо убедиться, чтоJQuery работает, выполните следующие ленивые шаги:

  1. добавьте следующее в ваш файл LocalSettings.php.

$ wgAllowUserJs = true;

Перейдите на пользовательскую страницу vector.js вашей учетной записи (т. Е. User: /vector.js) и введите любой код JQuery, например

$(document).ready(function(){ alert("here"); }); После сохранения страницы она должна предупредить браузер с помощью"здесь" слово.

Если нет, то вам следует проверить, включен ли Javascript в вашем браузере, также, если вы импортируете куки JQuery через URL, то убедитесь, что URL работает по протоколу https, поскольку MediaWiki не будет принимать какие-либовнешние источники, которые не применяют протокол https.

0 голосов
/ 26 мая 2018

Пытаясь заставить jquery работать в классе расширений, я решил создать пробное расширение, чтобы доказать теорию, которая, как я думал, может иметь место:

Вот мой файл расширения:

<?php
# Alert the user that this is not a valid entry point to MediaWiki if they try to access the special pages file directly.
if (!defined('MEDIAWIKI')) {
    echo <<<EOT
To install my extension, put the following line in LocalSettings.php:
require_once( "$IP/extensions/MyExtension/MyExtension.php" );
EOT;
    exit( 1 );
}

$wgExtensionCredits['specialpage'][] = array(
    'path' => __FILE__,
    'name' => 'TryExtension',
    'author' => 'Andy',
    'url' => 'https://home.com',
    'descriptionmsg' => 'Trial Extension',
    'version' => '1.0.0',
);

$dir = dirname(__FILE__) . '/';

$wgAutoloadClasses['TryExtension'] = $dir . 'tryExtension.class.php'; # Location of the SpecialMyExtension class (Tell MediaWiki to load this file)

$wgHooks['BeforePageDisplay'][] = 'TryExtension::execute';

$wgResourceModules['ext.TryExtension'] = array(    
    'scripts' => array('scripts/tryjQuery.js'),    
    'dependencies' => array( 'jquery.cookie'),    
    'localBasePath' => dirname( __FILE__ ),    
    'remoteExtPath' => 'TryExtension',
    'position' => 'top'
);

Вот мой файл JavaScript, который включен с расширением:

 $(document).ready(function () {
        alert("here");
    });

А вот класс расширения:

<?php
class TryExtension extends SpecialPage
{
 public function execute(){
     global $wgOut;
     $wgOut->addModules( 'ext.TryExtension' );
    ?>
     <script>
        $(document).ready(function () {
        alert("from class - here");
    }); 
    </script>
     <?php
 }
}

И угадайте, что?оповещение из файла JS прекрасно работает ... но не от расширения.Выдает referenceError $ не определено.

Полагаю, мне придется переместить весь свой встроенный js-код в выделенные файлы javascript, что бы там ни было.Это было не так в версии 1.24.x MediaWiki.Теперь я верю, что многие мои расширения требуют много работы.

0 голосов
/ 25 мая 2018

Возможно, проблема заключается в опции 'position' => 'top' регистрации вашего модуля, которая, вероятно, приводит к его загрузке даже раньше, чем jQuery.

Обычно нет причины использовать 'position' => 'top', если ресурс не является CSSмодуль.

...