Javascript в MediaWiki

Я хотел бы использовать Javascript на своих Вики-страницах, но я не смог понять, как это сделать. Я использую размещенное решение на Wikia. Поэтому я не могу изменить установку, добавить расширения или взломать настройки. Но у меня есть права администратора на моей Вики, поэтому я могу получить доступ к MediaWiki пространство имен и MediaWiki:Common.js.

javascript, который я хочу использовать (клубок) будет состоять из внешнего скрипта, который будет общим для нескольких страниц(но не все страницы wiki) и некоторый код, который будет специфичен для каждой страницы, такой, который вы обычно помещаете в <script> тег.

беда в том, что Mediawiki дезинфицирует <script> теги, и я не смог найти способ их вставить. Я пытаюсь сделать это удобной для редактора настройкой, которая будет использоваться во всей Вики, поэтому я также пытаюсь избежать хаков и найти правильное решение.


обновление: новая проблема

видимо MediaWiki также санирует Атрибуты данных HTML5, на которые сильно полагается клубок. Любые идеи по решению этой проблемы приветствуются.

1 ответов


MediaWiki не позволяет <script> теги на страницах по очевидным причинам: если это так, любой может использовать их для внедрения JavaScript в вашу Вики и, например, украсть учетные данные.

есть несколько вещей, которые вы мог бы do:

  • напишите некоторый общий код JavaScript, чтобы извлечь параметры из чего-то, что is разрешено на страницах MediaWiki, таких как скрытый <div>. Будьте осторожны, чтобы не вводить отверстия безопасности, когда делающий это.

  • добавьте что-то вроде этого в MediaWiki:Common.js:

    importScript('MediaWiki:Tangle/' + wgPageName + '.js');
    

    затем, когда пользователь посещает страницу "Foo", страница " MediaWiki:Tangle/Foo.js " будет загружен как JavaScript. Конечно, эта страница будет редактироваться только администраторами, но этого может быть достаточно для ваших нужд. (Вы можете использовать тот же трюк для импорта JS со страниц в других пространствах имен, но это откроет дыру безопасности шириной в мили.)