将外部JavaScripts添加到MediaWiki 1.28

时间:2017-04-06 21:45:51

标签: javascript php jquery html mediawiki

在我目前的1.25.1 MediaWiki设置中,我有很多外部JavaScrips,如bxslider,qtip,datatables等,通过非常侵入的方式嵌入到标题中。

我只是添加了

$out->addHeadItem('danalytics','<script src="https://aionpowerbook.com/bxslider/jquery.bxslider.min.js"></script><link href="https://aionpowerbook.com/bxslider/jquery.bxslider.css" rel="stylesheet" />
<script>
$(document).ready(function(){
$(\'.bxslider\').bxSlider({
captions: true,
auto: ($(".bxslider li").length > 1) ? true: false,
pager: ($(".bxslider li").length > 1) ? true: false,
speed: 6000,
infiniteLoop: true,
});});
$(document).ready(function(){
$(\'.bxslidermap\').bxSlider(
);});
</script>
');

将其余的脚本放入SkinMonoBook.php中

$out->addStyle( $this->stylename . '/IE70Fixes.css', 'screen', 'IE 7' );

我知道我不应该触摸核心文件,但它有效,而且我很好。

无论如何,最近我一直在尝试将MediaWiki软件更新到1.28.0,但无论我如何尝试实现所有JavaScripts,我都会

jQuery is not defined
$ is not defined

有时它会起作用,有时却不起作用。我不知道出了什么问题。

我试过这个: How to add external <script> to <head> section for all mediawiki pages?

没用。这有点显而易见,因为MediaWiki的jquery被加载到底部(我认为?)但是即使在我的任何JS之前添加jquery库之后它也只会工作。

我也使用PageDisqus扩展,所以我想我只是将外部JavaScripts复制/粘贴到PageDisqus代码中。该扩展程序还在每个页面上加载javascrips,它似乎始终有效,所以我想为什么不这样做。 但有时候它会起作用,有时则不然。

这是一个例子:

https://aionpowerbook.com/pb_new/index.php?title=Main_Page

顶部的滑块有时只会加载,有时我需要进行硬刷新以使其加载但通常在一个浏览器上工作,另一个我继续得到“ReferenceError:jQuery未定义”。

在这里,我还尝试将其自己的jquery添加到除了nope以外的任何其他内容之后,仍然得到

$(...)。bxSlider不是函数

不时。

任何帮助都将受到赞赏,因为我在这里缺乏想法。

1 个答案:

答案 0 :(得分:0)

从MediaWiki 1.26开始,MediaWiki的所有JavaScript都以异步方式加载[1];因此,如果您未通过ResourceLoader 声明依赖项加载所有代码,则无法保证在加载代码时jQuery(或其他任何内容)可用。这可能是您的代码失败的原因。您可以尝试以下方法之一:

  1. 使用mw.loader.load()加载外部代码;我不确定这是否足够。
  2. 将代码加载到MediaWiki:Common.js(维基内部的一个页面)。
  3. 在我看来,更好的方法是创建一个扩展来加载所有代码 - 将它的部分声明为ResourceLoader模块并加载它们。正如@Tgr所说,请参阅https://www.mediawiki.org/wiki/ResourceLoader/Developing_with_ResourceLoader了解更多详情。