写这篇文章是因为我需要调用某个外部js文件,以实现某些功能(详见《如何在MediaWiki中插入思维导图》)。从官方文档以及灰机的帮助文档中,基本上提到了如下几种方法:
- 全局Mediawiki:commons.js
- 小工具Gadget
- 特殊的解析器函数扩展(灰机用的Mustache模板和Widget扩展类似)
- 个人页面User:<你的用户名>/common.js
前三种基本上都需要一定的管理员权限,后者虽然权限较低但常常被禁用。可问题是,我知道用上述几种方法添加js代码,调用呢?我只会抄代码,可从来没注意过如何调用的事。
反正你要是在js页面中直接黏贴下述代码是肯定不行的(css倒是可以直接用)。
<script src="https://我想要引用的js地址"></script>
从网上搜索到的第一个解决方案是在Localsettings.php中添加如下代码:
$wgHooks['BeforePageDisplay'][] = function( OutputPage &$out, Skin &$skin ) {
$out->addScript( '<script src="我想要引用的js地址"></script>' );
};
这个我还真下不了手。
该页面中的某个链接指向了官网中的某个文档,其中具体谈了怎样加载内部和外部js和css的方法:
// External JavaScript file
mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript' );
不知道是不是缓存的关系,反正我替换了其中的地址并没有成功,改成如下:
mw.loader.load( 'https://我想要引用的js地址', 'text/javascript' );
刚开始也没成功,直到我动手改Localsettings.php文件才有效果。难道……
删掉Localsettings.php中的代码,效果依旧,应该是缓存的关系。
好了,开始调试下一下工作。
注意:最好是不要随便调用外部的js,太不安全。除非你跟我一样,就是一个人在玩。
参考资料:
https://www.huijiwiki.com/wiki/%E5%B8%AE%E5%8A%A9:%E7%AB%99%E7%82%B9JS%E7%BC%96%E8%BE%91
https://stackoverflow.com/questions/25907743/how-to-add-external-script-to-head-section-for-all-mediawiki-pages
https://www.mediawiki.org/wiki/ResourceLoader/Core_modules