jquery - 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。
谢谢
解决方案
在努力使 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 中情况并非如此。现在我相信,我的很多扩展都需要大量工作。
推荐阅读
- html - CSS和HTML定位的解释
- xamarin - 从 Proguard (Xamarin.Android) 获取 mapping.txt 文件
- javascript - 用 JavaScript 对数字进行四舍五入
- android - 清除所有图像会导致 ClassCastException 崩溃
- r - 如何为重叠点绘制不同颜色的散点图(如热图)?
- r - R中的更新函数
- c# - 随机移动对象而不将其放在墙内 - Unity 5
- python - 从 GTK 获取配色方案
- c# - 在无头模式 Selenium C# 中找不到文本元素
- iis - 我的 IIS 连接到需要客户端证书的远程 Web 服务