On 12/29/2015 03:59 PM, Daniel Barrett wrote:
I run a private wiki for developers (not accessible from the Internet) that lets any wiki page author run JavaScript on a page by adding a tag:
<javascript> alert("hi"); </javascript>
(We understand the security implications, which is why the wiki isn't accessible by the world.) When we upgraded to MediaWiki 1.26 (from 1.24), a problem occurred: the <javascript> tag stopped recognizing the "mediawiki" and "mw" objects, but otherwise works. The following code reports an undefined variable "mw":
<javascript> mw.loader.using(....) </javascript>
I assume this is because the <javascript> extension builds a <script> tag as a string and uses the SkinAfterBottomScripts hook to add it to the page, rather than using ResourceLoader. However, I cannot figure out how to use ResourceLoader to add JavaScript provided on the wiki page like my small examples above. We can't use the array $wgResourceModules[$name]['scripts'] because the JavaScript isn't in a static file.
Since MediaWiki 1.26, all ResourceLoader modules are loaded asynchronously, so inline scripts now need to account for the possibility they may be executed before the jquery and mediawiki modules have loaded.
If you use ResourceLoader::makeInlineScript() to build the HTML script element, your JavaScript code will be automatically wrapped in an anonymous function and queued for execution once ResourceLoader has started up.