如何将自定义全局JavaScript添加到Mediawiki?

13

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

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

我不想将其作为扩展的一部分来完成,并且我希望将更改保留在LocalSettings.php中。

4个回答

15

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

仅当启用$wgUseSiteJs时Common.js中的JavaScript代码才会被加载。但这是默认设置,因此它应该有效,除非您故意在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代码。 有关更多详细信息,请参见$wgResourceModulesBeforePageDisplay文档,其中包括其他模块选项(以及核心模块)。


这太棒了!比维基文档更有用。我认为在尝试添加各种JavaScript/jQuery库时,使用资源模块和钩子是必要的。 - MirroredFate

2

Common.js页面已被删除,而您链接的页面上的文档缺乏任何有用示例。我真诚地希望您能编辑您的答案,包括一两个关于您所讨论内容的示例。 - MirroredFate
你尝试在文件系统中搜索 common.js 了吗?它存在吗? - garryp
我找过了,没有名为“Common.js”或“common.js”的文件。 - MirroredFate
如果你运行开发工具F12并查看页面正在加载哪些文件,它是否尝试请求common.js文件并返回404错误?据我所知,如果您想要将任何JS添加到页面中,则应将其放在common.js中,以获得简单的解决方案。 - garryp
1
搞定了。没有common.js文件。有一个名为“MediaWiki:Common.js”的页面,只有管理员才能访问。在维基安装的搜索栏中输入该名称,并使用您的代码编辑该页面。 - MirroredFate
显示剩余3条评论

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

1
您可以将JavaScript代码放在您的维基的“MediaWiki:common.js”页面中。
在一个全新的维基上,您需要创建这个页面。因为它在“MediaWiki”命名空间中,您可能会遇到权限问题。除非您是管理员用户,否则您无法编辑该页面。转到页面“Special:ListUsers/sysop”以查看管理员用户是谁,并确保您已登录其中之一(忘记密码了吗?)。一旦您克服了这些障碍并可以编辑“MediaWiki:common.js”……
您可以在那里放置任何javascript代码,并且对于所有用户都应该加载,无论他们的用户组或皮肤选择如何(因此称为“通用”)。更改后,请记住您的浏览器可能会缓存某些内容。查看任何维基页面并进行ctrl +刷新,新的javascript应该就会生效。
如果您有要加载的文件中的JavaScript(可以上传到您的维基文件中,也可以托管在外部站点上),则可以通过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();
    });
  }); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接