Как я могу иметь ту же переменную JavaScript на той же странице? - PullRequest
0 голосов
/ 18 января 2011

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

Проблема сейчас в том, что я не могу включить одинаковые имена переменных на странице.

Например:

<script type="text/javascript">
  var ttp_number = "1Z8E26R80281495993"; // Tracking number

  var ttp_key="123456";
  (function(){
    document.write('<div id="ttp"></div>');
    s=document.createElement('script');
    s.type="text/javascript";
    s.src="http://c.trackthepack.com/j/e?" + Math.random();
    setTimeout("document.getElementById('ttp').appendChild(s);",1);
  })()
</script>

Тогда, если бы они захотели снова это встроить, мне пришлось бы изменить все имена переменных:

<script type="text/javascript">
  var ttp_number_001 = "446888240962"; // Tracking number

  var ttp_key_001="123456";
  (function(){
    document.write('<div id="ttp_001"></div>');
    s_001=document.createElement('script');
    s_001.type="text/javascript";
    s_001.src="http://c.trackthepack.com/j/e?" + Math.random();
    setTimeout("document.getElementById('ttp_001').appendChild(s_001);",1);
  })()
</script>

Я согласен с тем, что они меняют содержимое блока function(), но ttp_number и ttp_key должны оставаться с тем же именем переменной.

Прямо сейчас, когда у меня несколько встраиваний на странице, они все наследуют содержимое переменных в последнем коде встраивания.

Итак, главный вопрос здесь ... как мне это исправить?

Ответы [ 3 ]

2 голосов
/ 18 января 2011

Может быть, вместо этого хранить ttp_key и ttp_number в массивах?

1 голос
/ 18 января 2011

Почему бы не объявить переменные в теле функции. Тогда они только ограничены этой функцией. Вы по-прежнему можете устанавливать для них разные значения, когда вы помещаете скрипт в HTML.

Я знаю, что вы упоминаете / подразумеваете, что пользователь может редактировать функцию (по какой-то причине), но мне это просто кажется обидным, так что я надеюсь, что на самом деле это не так.

0 голосов
/ 18 января 2011

Почему вы кешаешь с Math.random()?JavaScript в http://c.trackthepack.com/j/e часто меняется?Если нет, то вы должны позволить кешу выполнять свою работу.

Но если это так, можете ли вы сделать его достаточно динамичным для проверки аргументов, с которыми он вызывается, и непосредственного использования этих аргументов вместо передачи их через глобальный window object, чтобы вы загружали http://c.trackthepack.com/j/e?n=446888240962&k=123456, и он не должен искать их при запуске скрипта?

...