web-dev-qa-db-fra.com

Javascript: variables globales partagées entre les fichiers .js

J'ai des problèmes avec les variables globales.

Étant donné que j'ai les fichiers suivants: init.html, main.html, init.js, main.js et help.js:

Où, 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>

Dans init.js:

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

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

Et dans help.js:

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

Lorsque je clique sur le bouton, affiche "variable globale", mais je dois afficher "param".

En bref, j'ai besoin qu'un fichier .js lise une variable globale dans un autre fichier js où cette variable est introduite dans une fonction appelée par un événement d'un utilisateur.

Merci.

éditer variable globale initialisée avant d'importer des fichiers. js et en utilisant top. Fonctionne dans IE et firefox, mais chrome affiche "undefined"

15
vctlzac

Jetez un œil ici: Variables globales en Javascript sur plusieurs fichiers L'essentiel est que vous devrez peut-être déclarer les variables globales avant le fichier réel, essayez donc de l'insérer avant votre inclusion dans help.js

essayez donc de lui donner un coup de feu.

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

donc votre code devrait être:

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

essayez cela et voyez si cela fonctionne. supprimez également votre déclaration de variable globale de main.js pour cela.

20
Rivasa

Il n'y a pas vraiment de contexte global qui couvre les fenêtres (frames). Tous les cadres d'une "famille" ont accès à une variable appelée "top" qui fait référence à la fenêtre la plus haute, vous pouvez donc l'utiliser.

top.glob = "global variable";

et dans votre code iframe:

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

edit - Voici une version légèrement simplifiée de votre code , et cela fonctionne très bien pour moi.

8
Pointy

Lorsque vous êtes à l'intérieur d'un cadre et que vous souhaitez obtenir une variable de fenêtre à partir de la fenêtre parent, vous devez vous y référer.

Utilisez top ou window.top.

1
Gabriel Gartz