Javascript:.js文件之间共享的全局变量

时间:2011-12-07 13:28:59

标签: javascript html global-variables

我遇到全局变量问题。

考虑到我有以下文件: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文件中的全局变量,其中此变量被送入由用户事件调用的函数中。

感谢。

编辑 - 导入文件前初始化的全局变量。 js和使用顶部。适用于IE和Firefox,但Chrome显示“未定义”

3 个答案:

答案 0 :(得分:19)

看看这里: Global variables in Javascript across multiple files 最重要的是,您可能必须声明全局变量 在实际文件之前,所以在包含到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中删除你的全局变量声明。

答案 1 :(得分:7)

实际上没有跨越窗口(框架)的全局上下文。 &#34;系列中的所有帧&#34;可以访问名为&#34; top&#34;的变量。这是指最顶层的窗口,所以你可以使用它。

top.glob = "global variable";

并在您的iframe代码中:

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

编辑 - Here is a a slightly simplified version of your code,对我来说效果很好。

答案 2 :(得分:1)

当你在一个框架内并希望从父窗口获取一个窗口变量时,你必须引用它。

使用topwindow.top