我该如何将自定义javascript文件(比如说custom.js
)添加到mediawiki安装中呢?
例如,如果我将custom.js
放在resources/lib/
文件夹下,如何让它在每个页面上加载?
我不想将其作为扩展的一部分来完成,并且我希望将更改保留在LocalSettings.php
中。
我该如何将自定义javascript文件(比如说custom.js
)添加到mediawiki安装中呢?
例如,如果我将custom.js
放在resources/lib/
文件夹下,如何让它在每个页面上加载?
我不想将其作为扩展的一部分来完成,并且我希望将更改保留在LocalSettings.php
中。
正如garryp已经建议的那样,您可以将JavaScript代码放入MediaWiki:Common.js中。请注意,这不是一个文件,而只是您可以在维基上编辑(作为管理员)的页面。例如,这是英文维基百科上的MediaWiki:Common.js页面。
仅当启用$wgUseSiteJs时Common.js中的JavaScript代码才会被加载。但这是默认设置,因此它应该有效,除非您故意在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代码。 有关更多详细信息,请参见$wgResourceModules和BeforePageDisplay文档,其中包括其他模块选项(以及核心模块)。
使用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;
};
mw.loader.load( 'https://some.website.com/some-javascript.js' );
jQuery.getScript( 'https://some.website.com/some-javascript.js',
function() {
addOnloadHook(function() {
someJavaScript.thingToRunOnLoad();
});
});