2017-04-06 8 views
1

私の現在の1.25.1 MediaWikiの設定では、bxslider、qtip、datatablesなどのような外部JavaScripがヘッダに非常に邪魔な方法で埋め込まれています。MediaWikiに外部JavaScriptを追加する1.28

私は単に私が私がコアファイルを触れることになっていませんでした知っているが、それは働いていただけ

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

後SkinMonoBook.phpに

$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> 
'); 

とスクリプトの残りの部分を追加し、私はそれで大丈夫だった。最近、私は1.28.0にMediaWikiソフトウェアを更新しようとしてきたが、私は戻って、すべてのJavaScriptを実装しようとどのように関係なく、私は

jQuery is not defined 
$ is not defined 

を取得時にはそれが動作しますが、時にはそれはdoesnのとにかく

、 t。何が悪いのか分かりません。

私はこれを試してみました: 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

上部のスライダーだけ時々の負荷、時には別のI上で、私はそれをロードするために、ハードリフレッシュを行う必要があるが、通常は1つのブラウザ上で、それが動作します"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には、2つの可能な回避策が示されています。 –

関連する問題