2017-04-06 30 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提供了兩種可能的解決方法。 –