2017-04-06 4 views
1

현재 1.25.1 MediaWiki 설정에서 bxslider, qtip, datatables 등과 같은 많은 외부 JavaScrip이 매우 방해가되는 방식으로 헤더에 삽입되어 있습니다.MediaWiki에 외부 JavaScript 추가하기 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> 
'); 

그냥 내가 핵심 파일을 터치 안되었다 알고

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

후 SkinMonoBook.php에 스크립트의 나머지 부분을 추가하지만, 일을하고, 나는 그걸로 잘했다. 어쨌든

가, 최근에 내가 1.28.0에 미디어 위키 소프트웨어를 업데이트하기 위해 노력했지만 때로는 작동 내가 다시 모든 자바 스크립트를 구현하려고 아무리, 나는

jQuery is not defined 
$ is not defined 

를 얻을, 때로는 '아무튼 티. 나는 무엇이 잘못되었는지 전혀 모른다. How to add external <script> to <head> section for all mediawiki pages?

작동하지 않았다 :

나는이 시도했다. 이것은 MediaWiki의 jquery가 맨 아래에로드되어있는 것처럼 보였습니다 (제 생각에는?)하지만 JS 이전에 jquery 라이브러리를 추가 한 후에도 가끔씩 만 작동합니다.

또한 PageDisqus 확장을 사용하므로 외부 자바 스크립트를 PageDisqus의 코드에 복사/붙여 넣을 수 있습니다. 그 확장은 또한 모든 페이지에서 javascrip을로드하고, 항상 작동하는 것처럼 보입니다. 그래서 나는 왜 그렇게 생각하지 않았습니다. 하지만 때때로 다시 작동하는 경우가 있습니다. 때때로 그렇지 않습니다. 때때로 나는 그것이로드하지만, 일반적으로 하나 개의 브라우저에 또 다른 I에서 작동하는지 확인하기 위해 새로 고침을 할 필요가,

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 (위키 내의 페이지)에로드하십시오.
  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에는 두 가지 가능한 대안이 제시되어 있습니다. –