首页 > 解决方案 > Mediawiki 1.27.4 jquery 未加载

问题描述

我是 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') ,它还抱怨 mw 无法识别。

我还添加了 $wgResourceLoaderDebug = true; 在我的本地设置中,这样资源加载器就不会捆绑我的脚本和 css

我怀疑 Mediawiki 内部无法在没有 jquery 的情况下运行。但现在我怎样才能让 jquery 正确加载到我的扩展中,以便我可以使用 jquery.cookie。

谢谢

标签: jquerymediawiki

解决方案


在努力使 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 $ is undefined。

我相信,无论好坏,我都必须将所有内联 js 代码移动到专用的 javascript 文件中。在 1.24.x 版本的 MediaWiki 中情况并非如此。现在我相信,我的很多扩展都需要大量工作。


推荐阅读