2017-04-06 76 views
1

在我当前的1.25.1 MediaWiki安装中,我通过非常侵入性的方式将很多外部JavaScrips(如bxslider,qtip,datatables等)嵌入标头中。将外部JavaScript添加到MediaWiki 1.28

我只是简单地添加

$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但无论我如何努力实现所有的JavaScript的背,我得到

jQuery is not defined 
$ is not defined 

有时工作,有时它不”吨。我不知道什么是错的。

我尝试这样做: How to add external <script> to <head> section for all mediawiki pages?

没有工作。当MediaWiki的jquery被加载到最底层时(我认为?),这显得有点显而易见,但即使在我的任何JS之前添加jquery库,它也只会有时候有效。

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

这里有一个例子:

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

在顶部只是偶尔负载滑块,有时我需要做一个硬刷新,使其负载,但通常在一个浏览器,它的工作原理,另一个我继续收到“ReferenceError:未定义jQuery”。

在这里我也想加入我自己的jQuery的任何事情之前,但没了,仍然得到

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

不时。

任何帮助将不胜感激,因为我在这里没有想法。

+1

请参阅https://www.mediawiki.org/wiki/ResourceLoader/Developing_with_ResourceLoader – Tgr

回答

0

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

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

感谢您的提示。变种2为我工作。 一般来说,https://www.mediawiki.org/wiki/ResourceLoader/Core_modules#mw.loader.using将是一个很好的解决方案。但目前它不接受URL和外部脚本。在https://phabricator.wikimedia.org/T27962提供了两种可能的解决方法。 –