Как предотвратить изменение значения переменной в Javascript [duplicate]

Возможный дубликат:

Есть ли константы в Javascript?

Есть ли способ объявить статическое окончательное значение в JavaScript, чтобы он не мог быть изменен третьей стороной?

У меня есть приложение для обмена статьями, где бесплатные пользователи поддерживаются рекламой. Что я хочу сделать, так это запретить свободным пользователям изменять содержимое innerHTML, изменяя переменную хранения для содержимого.

На данный момент у меня есть таймер, который перезагружает innerHTML статьи на сайте пользователя каждые 5 секунд, и я 'm хранит значение для перезагрузки в переменной.

Однако, если гений, использующий jsbeatify, исследует, какая переменная содержит ключ к удалению рекламы, и изменяет это, мы теряем доход и влияние наших продуктов.

Как предотвратить изменение внутренней переменной?

ОБНОВИТЬ

Это конечный результат того, что я придумал:

http://jsfiddle.net/PgdYP/1/


<br>



 
    e = function(){var data = { };
    Object.defineProperty(data, 'secret', {
       value: "Hello world!",
       writable : false,
       enumerable : true,
       configurable : false
       });this.z=function(){window.setTimeout("try{document.getElementById('specialdiv').innerHTML =   '"+data.secret+"';t.i.z();}catch(err) {document.body.innerHTML=err;}",5000);}}
        g = function(){};
        g.prototype = new e();e=null;window.t = {}
        Object.defineProperty(window.t, 'i', {
        value: new g(),
        writable : false,
        enumerable : false,
        configurable : false });g = null;
        window.t = Object.freeze(window.t); t = Object.seal(window.t);
        t.i.z();
    

Это будет представлено в упакованном формате, просто чтобы было сложнее просто скопировать код из исходного кода. Таким образом, усилия по простому копированию и вставке кода будут максимизированы, и их будет очень сложно автоматизировать.

Спасибо всем за ваши ответы.

 Esailija25 окт. 2012 г., 10:53
Вы не должны заботиться о тех немногих пользователях, которые способны сделать это, нет способа контролировать страницу после того, как она загружена в пользователей. браузеры
 Tom Sarduy25 окт. 2012 г., 10:54
 Jacob George25 окт. 2012 г., 10:51
как назывался сайт, над которым вы снова работали?

Ответы на вопрос(2)

попробуйтеConst ключевое слово. это должно создать неизменную переменную.

 jartaud15 февр. 2016 г., 03:57
@ Рамеш икр? черная овца побеждает в этом. : D
 Ramesh15 февр. 2016 г., 02:49
@jartaud - А я и не подозревал, что Chrome реализует это частично. Но когда я написал комментарий в 2012 году, IE 10 был последним стабильным выпуском, и он также не поддерживал const :)
 jartaud14 февр. 2016 г., 07:48
@ Рамеш, ты имеешь в виду Google Chrome?caniuse.com/#feat=const
 le_m13 июн. 2016 г., 05:20
const делаетне сделать переменную неизменной.const a = []; a.push(1); работает. Это просто предотвращает повторное объявление или повторное назначение переменной.
 Ramesh25 окт. 2012 г., 10:58
интересно ... но я неЯ думаю, что IE реализует это
Решение Вопроса

Да, есть. По крайней мере длясвойства объектаES5 дал нам возможность изменитьдескриптор свойства Флаги от руки. Таким образом, мы можем сделать это как

var data = { };

Object.defineProperty(data, 'secret', {
    value: 42,
    writable : false,
    enumerable : true,
    configurable : false
});

Таким образом, мы создали свойствоsecret со значением42 вdata, который не может быть изменен или удален.

Предостережение здесь в том, чтогениальность (как вы это называли) также сможет обнаружить этот код и просто изменить его, чтобы снова иметь возможность изменять содержимое, если он этого пожелает. Ты тольконе может таким образом создайте защищенный интерфейсный javascript. Код всегда будет доступен в виде простого текста для всех.

Чтобы сделать это более полным, вы также можете создать объект иfreeze это в какой-то момент, используяObject.freeze() и / илиObject.seal() отключить опцию дляEnumerating,удаление а такжемодифицирующий на свойствах объекта.

Но опять же слово предостережения: Это предназначено для воздействия на ваш собственный или чужой код, чтобы предотвратить изменения случайно или преднамеренно во время выполнения. Нет способа остановить разработчика, так как он может простостой выполнение вашего сценария, прежде чем это даже может повлиять.

 alexandernst25 окт. 2012 г., 10:58
@ michael-dibbets Просто чтобы прояснить ситуацию еще дальше. Вы можете'защищатьчто-нибудь, Компании тратят миллионы на системы безопасности, которые спустя несколько месяцев становятся объектами безопасности. Ты выиграл'просто закодируй следующую большую анти-уязвимую вещь ... любым способом ...
 le_m13 июн. 2016 г., 05:19
Примечание. Если заданное вами значение свойства является не примитивным типом данных, а объектом, его можно изменить (только не переназначить).
 Kate29 мая 2014 г., 15:58
+1 за фразуНет способа остановить разработчика ... »!
 Tschallacka25 окт. 2012 г., 11:13
Причина в том, что я хочу, чтобы это не изменялось при загрузке и после этого с помощью кода JavaScript. Я знаю, что этоневозможно все заклеить, но я хочу, чтобы было как можно сложнее изменить вывод скрипта, когда он 'на их сайте. Есть этот трешхолд для всех, кто хочетобмануть» между усилием и результатом. Таким образом, я поднимаю планку еще на одну ступеньку. Спасибо.

Ваш ответ на вопрос