Javascript в MediaWiki - PullRequest
       5

Javascript в MediaWiki

8 голосов
/ 21 ноября 2011

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

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

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


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

Судя по всему, MediaWiki также дезинфицирует атрибуты данных HTML5, на которые в значительной степени опирается Tangle. Любые идеи по решению этой проблемы очень приветствуются.

1 Ответ

5 голосов
/ 21 ноября 2011

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

Есть несколько вещейВы могли бы делать:

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

  • Добавьте что-то подобное в MediaWiki: Common.js:

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

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

...