2 votes

Charger le javascript dynamiquement ?

Dans mon projet, j'ai besoin d'ajouter java script dynamiquement. J'ai un fichier js global.js qui contient toutes les variables globales que je veux ajouter dynamiquement. Je veux aussi ajouter global.js avant util.js( qui utilise les variables définies dans global.js), ce qui ne se produit pas.

Si j'ouvre la page source, je ne vois pas le global.js qui y a été ajouté. Je veux aussi que cela fonctionne dans tous les navigateurs, principalement dans ie6 et ie8.

mon code Index.html

<script src="../fw.ui.lib/resources/sap-ui-core.js" id="sap-ui-bootstrap"
                  data-sap-ui-libs="sap.ui.commons, sap.ui.table, sap.ui.ux3"
                  data-sap-ui-theme="sap_goldreflection">

            </script>

            <script src="../fw.ui/js/application_properties.js"      type="text/javascript"></script>
            <script src="../fw.ui/js/header.js" type="text/javascript"></script>
            <script src="../fw.ui/js/dao/userDAO.js" type="text/javascript"></script>
            <!-- add sap.ui.table,sap.ui.ux3 and/or other libraries to 'data-sap-ui-libs' if required -->
            <script src="js/controls/DynamicJsLoad.js" type="text/javascript"></script>
            <script></script>
            <script>addScriptDynamically()</script>
 <script src="js/controls/util.js" type="text/javascript"></script>

DynamicJsLoad.js

function loadScript(url){
      var e = document.getElementsByTagName("script")[5];
      var d = document.createElement('script');
      d.src = url;
      d.type = 'text/javascript';
      d.async = false;
      d.defer = true;
      e.parentNode.insertBefore(d,e);
}

function addScriptDynamically(){
      var scheme = getCacheBurstScheme();
      if( scheme == 'dev'){
            scheme = new Date();
      }
      loadScript('js/global.js'+'?scheme='+scheme);
}

3voto

Lukas Eder Points 48046

Si vous utilisez jQuery de toute façon, vous pourriez tirer parti de leur loadScript() fonction. Un exemple tiré de leur site web :

$.getScript("ajax/test.js", function(data, textStatus, jqxhr) {
    // [...]
});

En ce qui concerne votre solution actuelle, voici quelques conseils :

  1. Vous mettez defer = true qui reportera le chargement (et l'exécution) de votre script chargé dynamiquement à la fin. Ainsi, après util.js . Je ne pense pas que tu veuilles
  2. Les sources js chargées dynamiquement n'apparaissent pas dans le code source de votre page. Vous devrez peut-être utiliser un outil tel que Firebug pour vérifier si les choses ont été chargées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X