2011-12-07 14 views
11

Ho problemi con le variabili globali.Javascript: variabili globali condivise tra file .js

Considerando che ho i seguenti file: init.html, main.html, Init.js, main.js e help.js:

Dove, 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> 

In Init.js:

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

In 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>"); 
} 

E in help.js:

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

quando clicco a pulsante, visualizza "variabile globale", ma ho bisogno di visualizzare "param".

In breve, ho bisogno che un file .js legga una variabile globale in un altro file js in cui questa variabile viene inserita in una funzione chiamata da un evento di un utente.

Grazie.

modifica - variabile globale inizializzata prima di importare i file. js e usando il top. Funziona in IE e Firefox, ma il display cromato "indefinito"

+0

Prendere in considerazione la possibilità di ridurre al minimo l'utilizzo di proprietà globali (variabili globali e funzioni globali). Lo spazio dei nomi globale contiene già centinaia di nomi: non vuoi spingere i tuoi nomi in quello spazio dei nomi. –

+0

Sì, d'accordo - so che forse lo sapete già, ma i globals sono quasi sempre un modo terribile di fare le cose. Logica astratta in funzioni e passa invece i parametri. Firmato, il ragazzo che deve mantenere il codice spaghetti un giorno :) –

risposta

16

dare uno sguardo qui: Global variables in Javascript across multiple files La cosa più importante è che si può avere a dichiarare le variabili globali prima che il file vero e proprio, in modo da provare l'inserimento di questa prima dell'inclusione di help.js

così provare a dare questo è un colpo.

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

in modo che il codice dovrebbe essere:

<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> 

provare questo e vedere se funziona. inoltre, rimuovere la dichiarazione della variabile globale da main.js per questo.

+0

tks per la tua risposta Usando top e dichiarando le variabili globali prima che il file effettivo funzioni in IE e firefox, ma ha bisogno di lavorare in chrome = /. Qualsiasi Idea? – vctlzac

+0

no, non posso farlo :( – Annabelle

+0

Grazie per questa risposta –

7

Non esiste un contesto globale che si estenda su Windows (frame), davvero. Tutti i frame di una "famiglia" hanno accesso a una variabile chiamata "top" che si riferisce alla finestra più in alto, quindi puoi usarla.

top.glob = "global variable"; 

e nel codice iframe:

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

modificareHere is a a slightly simplified version of your code, e funziona bene per me.

+0

Quando viene modificato in top.glob l'avviso mostra "indefinito" – vctlzac

+0

Beh, tutto dipende da quando vengono eseguiti quei pezzi di codice, ecc. Creerò un jsfiddle . – Pointy

+0

@vctlzac Ho aggiornato la mia risposta con un collegamento a una pagina di esempio, che funziona. Si basa sul codice che hai postato (leggermente semplificato). – Pointy

1

Quando ci si trova all'interno di un frame e si desidera ottenere una variabile di finestra dalla finestra padre, è necessario fare riferimento ad esso.

Utilizzare top o window.top.