如何将自定义全局 javascript 添加到 mediawiki

How to add custom global javascript to mediawiki

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

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

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

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

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

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

正如 garryp 已经建议的那样,您可以将 JavaScript 代码放入 MediaWiki:Common.js. Note that this is not a file, but simply a page you can edit (as an administrator) on your wiki. For example, here's the MediaWiki:Common.js page on the English Wikipedia

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


也可以使用 ResourceLoader 从文件中加载 JavaScript 代码,但这有点复杂。不过,举个简单的例子,如果您的 MediaWiki 主目录中有名为 foo/bar.jsfoo/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 and BeforePageDisplay documentation for more details, including additional module options (and core modules).

您可以将 javascript 代码放入您维基的 "MediaWiki:common.js" 页面。

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

您可以将任何 javascript 放在那里,它应该为所有用户加载,无论他们的用户组或皮肤选择如何(因此得名 "common")。更改后,请记住您的 浏览器可能正在缓存 内容。查看任何 wiki 页面并按 ctrl+刷新,新的 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();
    });
  }); 

使用 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;
};