11

如何将自定义 javascript 文件(比如说custom.js)添加到 mediawiki 安装中?

例如,如果我放在custom.js文件夹下resources/lib/,我如何让它在每个页面上加载?

我不想将其作为扩展的一部分,我更愿意将我的更改保留在LocalSettings.php.

4

4 回答 4

13

正如 garryp 已经建议的那样,您可以将 JavaScript 代码放入MediaWiki:Common.js。请注意,这不是一个文件,而只是一个您可以(作为管理员)在您的 wiki 上编辑的页面。例如,这是英语 Wikipedia 上的 MediaWiki:Common.js 页面

仅当启用$wgUseSiteJs时才会加载来自 Common.js 的 JavaScript 代码。但是,这是默认设置,所以它应该可以工作,除非您通过$wgUseSiteJs = false;在 LocalSettings.php 文件中添加一行来故意禁用它。


也可以使用ResourceLoader从文件中加载 JavaScript 代码,但这有点复杂。不过,作为一个简单的示例,如果您在主 MediaWiki 目录中有名为foo/bar.jsandfoo/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文档,包括其他模块选项(和核心模块)。

于 2015-04-27T19:06:14.863 回答
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;
};
于 2017-04-19T07:59:05.223 回答
1

将代码放入您的 wiki 的“MediaWiki:common.js”页面

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

另请参阅页面下方的自定义皮肤。

于 2015-04-27T18:03:42.993 回答
1

您可以将 javascript 代码放在 wiki 的“MediaWiki:common.js”页面中。

在一个全新的 wiki 上,您将创建此页面。因为它位于“MediaWiki”命名空间中,您可能会遇到权限问题。除非您是管理员用户,否则您无法编辑该页面。转到“Special:ListUsers/sysop”页面查看管理员用户是谁,并确保您以其中之一的身份登录(忘记密码?)。一旦你克服了这些障碍并可以编辑“MediaWiki:common.js”......

您可以在那里放置任何 javascript,它应该为所有用户加载,无论他们的用户组或皮肤选择如何(因此名称为“common”)。更改后,请记住您的浏览器可能正在缓存内容。查看任何 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 文档中的“mw.loader.load”部分。

我们使用了一个 addOnloadHook 事件,该事件旨在从加载它开始,所以我们最终以 jQuery 方式进行:

jQuery.getScript( 'https://some.website.com/some-javascript.js',
  function() {
    addOnloadHook(function() {
      someJavaScript.thingToRunOnLoad();
    });
  }); 
于 2016-10-30T22:40:36.217 回答