在我目前的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不是函数
不时。
任何帮助都将受到赞赏,因为我在这里缺乏想法。
答案 0 :(得分:0)
从MediaWiki 1.26开始,MediaWiki的所有JavaScript都以异步方式加载[1];因此,如果您未通过ResourceLoader 和声明依赖项加载所有代码,则无法保证在加载代码时jQuery(或其他任何内容)可用。这可能是您的代码失败的原因。您可以尝试以下方法之一:
mw.loader.load()
加载外部代码;我不确定这是否足够。MediaWiki:Common.js
(维基内部的一个页面)。