2015-04-27 29 views
7

我如何可以添加自定義JavaScript文件(假設custom.js)到安裝的mediawiki?如何添加自定義的全局JavaScript到MediaWiki

例如,如果我把custom.js放在文件夾resources/lib/下,我該如何獲得在每個頁面上加載的內容?

我並不想這樣做,因爲擴展的一部分,我寧願讓我的變化LocalSettings.php

回答

9

正如garryp已經建議,你可以把JavaScript代碼插入MediaWiki:Common.js。請注意,這是而不是文件,而只是您可以在wiki上編輯(以管理員身份)的頁面。例如,這裏是MediaWiki:Common.js page on the English Wikipedia。從Common.js

JavaScript代碼是否已啓用$wgUseSiteJs只加載。但是,這是默認設置,所以它應該可以工作,除非您通過在LocalSettings.php文件中添加一行如$wgUseSiteJs = false;來故意禁用它。


也有可能從使用ResourceLoader文件加載JavaScript代碼,但是這是一個比較複雜一點。不過,就像一個簡單的例子,如果你有,說,叫你的主目錄鏈接到MediaWiki和foo/bar.js文件foo/baz.js,你可以通過添加如下代碼到您的LocalSettings.php文件加載它們:

// register a ResourceLoader module... 
$wgResourceModules['custom.foo.whatever'] = array(
    'scripts' => array('foo/bar.js', 'foo/baz.js'), 
    // could e.g. add dependencies on core modules here 
); 
// ...and set up a hook to add it to every page 
function addMyCustomScripts(&$out) { 
    $out->addModules('custom.foo.whatever'); 
    return true; 
} 
$wgHooks['BeforePageDisplay'][] = 'addMyCustomScripts'; 

基本上,此方法對擴展作者非常有用,他們可以根據需要使用它來加載CSS和JS代碼。 有關更多詳細信息,請參閱$wgResourceModulesBeforePageDisplay文檔,其中包括其他模塊選件(和core modules)。

+0

這太棒了!比維基文檔更有用。我想使用資源模塊並掛鉤,當你想要放入各種javascript/jquery庫是必要的。 – MirroredFate

1

把代碼中的「鏈接到MediaWiki:common.js」頁面維基

http://www.mediawiki.org/wiki/Manual:Interface/JavaScript

也看下來自定義外觀的頁面下。

+0

上Common.js該網頁已被刪除,你的鏈接頁面上的文檔在任何類型的有用的例子極其缺乏。我真誠地希望你能編輯你的答案,包括你正在談論的一個或兩個例子。 – MirroredFate

+0

你有沒有試過在你的文件系統中搜索common.js?它存在嗎? – garryp

+0

我做到了。沒有名爲「Common.js」或「common.js」的文件。 – MirroredFate

1

你可以把javascript代碼中的「鏈接到MediaWiki:common.js」你的維基頁面。

在一個全新的維基你會創建此頁面。因爲它位於「MediaWiki」命名空間中,所以您可能會遇到權限問題。除非您是管理員用戶,否則您無法編輯該頁面。轉到「Special:ListUsers/sysop」頁面查看管理員用戶是誰,並確保您以其中一個登錄(can't remember the password?)。一旦你已經克服了這些障礙,並可以編輯「MediaWiki:common.js」...

你可以放置任何JavaScript的,它應該爲所有用戶加載,無論他們的用戶組或皮膚選擇(因此名稱「共同」)。更改後,請記住您的瀏覽器可能會緩存的東西。查看任何wiki頁面並按Ctrl + Refresh,並且新的JavaScript應該啓動。

如果您想要加載的文件中包含javascript(或者上傳到wiki文件中,或者託管在外部網站上)你可以通過ResourceLoader來做到這一點。 Ilmari Karonen描述瞭如何做到這一點,作爲對LocalSettings.php的編輯,但另一種方法是......

您可以在「MediaWiki:common.js」頁面中使用ResourceLoader。例如編輯頁面,只需添加一行:

mw.loader.load('https://some.website.com/some-javascript.js'); 

看到mediawiki.org ResourceLoader/Modules docs的「mw.loader.load」部分。

我們使用它的目的是從加載此遵循一個addOnloadHook事件,所以我們最後只是jQuery的方式:

jQuery.getScript('https://some.website.com/some-javascript.js', 
    function() { 
    addOnloadHook(function() { 
     someJavaScript.thingToRunOnLoad(); 
    }); 
    }); 
2

使用common.js的是一個好主意。

另一種選擇是把它定義在LocalSettings.php中加載:

# Add onBeforePageDisplay function to BeforePageDisplay Hook 
$wgHooks['BeforePageDisplay'][] ='onBeforePageDisplay'; 

function onBeforePageDisplay(OutputPage &$out, Skin &$skin) 
{ 
    $script = '<script type="text/javascript" src="https://example.com/javascript.js"></script>'; 
    $out->addHeadItem("itemName", $script); 
    return true; 
}; 
相關問題