Javascript: глобальные переменные, разделяемые между файлами .js

У меня проблемы с глобальными переменными.

Учитывая, что у меня есть следующие файлы: init.html, main.html, init.js, main.js и help.js:

Где, init.html:

<HTML>
   <HEAD>
   <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.min.js"></script>
   <script type="text/javascript" charset="UTF-8" src="init.js" ></script>
   <script type="text/javascript" charset="UTF-8" src="main.js" ></script>
   <script type="text/javascript" charset="UTF-8" src="help.js" ></script>

   </HEAD>
   <BODY>
       <script>
          $(document).ready(function() {
          test();
        });
       </script>
  </BODY>
</HTML>

В init.js:

function test(){
alert(window.glob);
}

В main.html:

<HTML>
  <HEAD>
      <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.min.js"> </script>
      <script type='text/javascript' > 
          top.glob = "global variable";
      </script>
      <script type="text/javascript" charset="UTF-8" src="help.js" ></script>   
      <script type="text/javascript" charset="UTF-8" src="main.js" ></script>
  </HEAD>
  <BODY>    
     <div id="divtest"></div> 
     <form>
        <input type="button" value="button" onClick="callTest()" />
     </form>
  </BODY>
</HTML>

main.js:

function change(p){
   window.glob = p;

   $('#divtest').html("<iframe id='IFRAMEtest' width='720' height='400' frameborder='0' src='init.html'></iframe>");
}

И в help.js:

function callTest(){
 change('param');
}

Когда я нажимаю кнопку, отображается "глобальная переменная", но мне нужно отобразить "param".

Короче, мне нужно, чтобы файл .js читал глобальную переменную в другом js файле, где эта переменная вводится в функцию, вызванную событием пользователя.

Спасибо.

edit - инициализированная глобальная переменная перед импортом файлов. js и используя верхний. Работает в IE и firefox, но хромированный дисплей "undefined"

Ответ 1

Взгляните сюда: Глобальные переменные в Javascript для нескольких файлов Главное, что вам, возможно, придется объявлять глобальные переменные перед фактическим файлом, попробуйте вставить это перед включением в help.js

попробуйте сделать это.

<script type='text/javascript' > 
  window.glob = "global variable"; 
</script>

поэтому ваш код должен быть:

<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.3.min.js" ></script>

    <script type='text/javascript' > 
        window.glob = "global variable";
    </script>

    <script type="text/javascript" charset="UTF-8" src="help.js" ></script>   
    <script type="text/javascript" charset="UTF-8" src="main.js" ></script>
</head>

попробуйте это и посмотрите, работает ли он. также удалите объявление глобальной переменной из main.js для этого.

Ответ 2

Нет глобального контекста, который действительно охватывает окна (фреймы). Все кадры в "семействе" имеют доступ к переменной "top", которая относится к самому верхнему окну, поэтому вы можете использовать это.

top.glob = "global variable";

и в вашем коде iframe:

function test(){
  alert(top.glob);
}

edit — Вот немного упрощенная версия вашего кода, и она отлично работает для меня.

Ответ 3

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

Используйте top или window.top.