2011-12-07 103 views
11

我遇到了全局變量問題。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'); 
} 

當我點擊鏈接,將顯示 「全局變量」,但我需要顯示 「參數」。

簡而言之,我需要一個.js文件讀取另一個js文件中的全局變量,其中此變量被饋送到用戶事件調用的函數中。

謝謝。

編輯 - 導入文件之前進行初始化的全局變量。 JS和使用頂部。在IE和Firefox中工作,但鉻顯示「未定義」

+0

考慮最小化全局屬性(全局變量和全局函數)的使用。全局名稱空間已經包含了數百個名稱 - 您不想將自己的名稱推入該名稱空間。 –

+0

是的,我同意 - 我知道你可能已經知道這一點,但全局變量幾乎總是一種可怕的做事方式。抽象邏輯轉換爲函數並傳遞參數。簽名,那個有一天必須維護你的意大利麪代碼的人:) –

回答

16

到這裏看看: 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中刪除你的全局變量聲明。

+0

tks for your answer。 使用top並在實際文件在IE和firefox中工作之前聲明全局變量,但是需要在chrome = /中運行任何想法? – vctlzac

+0

不,也不能:( – Annabelle

+0

謝謝你的回答。 –

7

沒有跨越窗口(框架)的全局上下文,真的。 「家族」中的所有框架都可以訪問稱爲「top」的變量,它指向最上面的窗口,因此您可以使用它。

top.glob = "global variable"; 

,並在您的iframe代碼:

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

編輯Here is a a slightly simplified version of your code,這對我來說工作正常。

+0

當更改爲top.glob時,警告顯示「undefined」 – vctlzac

+0

那麼這一切都取決於代碼執行的時間等。我將設置一個jsfiddle 。 – Pointy

+0

@vctlzac我已經更新了我的答案,並提供了一個鏈接到示例頁面的鏈接。它基於您發佈的代碼(稍微簡化)。 – Pointy

1

當你在一個框架內並想從父窗口獲得一個窗口變量時,你必須引用它。使用topwindow.top

相關問題