用户在MediaWiki上的自定义JavaScript能否调用Lua模块?

在 MediaWiki 的维基上,每个用户都有一个用户 JavaScript 页面,他们可以在其中放置代码,类似于 GreaseMonkey 但没有扩展。例如在 User:YourUsername/vector.js

MediaWiki 还有一个名为 Scribunto 的嵌入式 Lua。

我知道可以从 MediaWiki 模板中调用 Lua 模块,我想那可能是它们的主要用途。但是通过谷歌和搜索 MediWiki 文档,我找不到一种从用户 JavaScript 中调用 Lua 模块的方法。


(我需要将语言名称映射到 JS 中的语言代码,并且有一个 Lua 模块可以实现此功能,而无需重复使用第二种语言的代码(主要是数据)。)

点赞
用户41071
用户41071

你不能直接这样做,因为JS在客户端上运行,而Lua在服务器上运行。你可以使用JS中的MediaWiki API调用模块。具体来说,使用扩展模板API模块

例如,如果你想从Module:Hex中调用函数h2d,并使用参数FF({{#invoke:hex|h2d|FF}}在wikitext中),并alert结果,则JS代码将如下所示:

var api = new mw.Api();
api.get( {
    action: 'expandtemplates',
    text: '{{#invoke:hex|h2d|FF}}'
} ).done ( function ( data ) {
    alert(data.expandtemplates['*']);
} );

而对于OP的具体情况,在英文Wiktionary上运行:

var langName = 'Esperanto';
(new mw.Api()).get({
  action: 'expandtemplates',
  format: 'json',
  prop: 'wikitext',
  text: '{{#invoke:languages/templates|getByCanonicalName|' + langName + '|getCode}}'
}).done(function(data) {
  alert('Language name: ' + langName + '\nLanguage code: ' + data.expandtemplates.wikitext);
});

(prop: 'wikitext'避免了API的警告,并允许您将结果作为data.expandtemplates.wikitext访问,而不是有点神秘的data.expandtemplates['*']。否则没有区别。)

2015-04-06 22:14:10