Заметки о вёрстке сайтов  ·  Александр Шуркаев об HTML, CSS и JavaScript (скрипты, справочники и примеры по сайтостроению)

Защита JavaScript-кода от вторжения

16 июня 2009 г.

Максимально избавляемся от влияния на наш код внешних скриптов и окружений. Ну и сами сторонним скриптам не мешаем.

— Неймспейсы и префиксы!

Неймспейсы

// Проверяем на наличие неймспейса. Если его нет, то создаём.
if (Begun === undefined || !Begun){
    var Begun = {};
}

Begun.
extend = function(destination, source){
    for (var property in source){
         destination[property] = source[property];
    }
    return destination;
};

Begun.$ = function(id){
    return document.getElementById(id);
};

Begun.Autocontext = new function(){
    var _this = this;
    …
}

Внутри методов (включая анонимные функции) можно для удобства и краткости кода применять сокращённую запись длинного имени:

(function(){
    var ac = Begun.Autocontext;
    ac.Customization.init();
    ac.setOptions({max_banners_count: 50, max_blocks_count: 10, scroll_banners_coef: 2});
    ac.printDefaultStyle();
    …
})();

Префиксы глобальных переменных

HTML-код:

<script type="text/javascript">
var begun_auto_pad = 106449301;
var begun_total_banners = 10;
</script>
<script src="http://autocontext.begun.ru/autocontext2.js" type="text/javascript"></script>

…в коде autocontext2.js:

var first_block_banners_count = 0;
if (_this.isFirstBlockWithBanners()){
    first_block_banners_count = _this.getActualBlockBannersCount(_this.Blocks[0]);
}
var total_banners = window.begun_total_banners || first_block_banners_count || _this.options.max_banners_count || 0;

NB: Вообще, использование неймспейсов и префиксов не даёт полной гарантии, что мы сможем ограничить свой код от внешнего влияния. Если, например, какой-то сторонний скрипт переопределит используемый нашим кодом встроенный метод escape(), то ничего с этим не поделаешь.

Хитовые статьи про разработку сайтов

Рассылка новостей и новых статей

Сообщения будут приходить пару раз в неделю, не чаще

Объявления

LiveInternet