9
votes

JavaScript si / sinon pour appeler un autre script JS?

Je dois appeler l'un des deux javascripts en fonction d'une condition, comme: xxx

mais cela ne fonctionne pas. Des idées Comment appeler un autre appel JavaScript dans un bloc IF / SLA?


1 commentaires

Créer un élément de script


10 Réponses :


-2
votes
<script type="text/javascript">
   if(b_condition)
      document.write('<script type="text/javascript" src="http://script1.js"></script>');
   else
      document.write('<script type="text/javascript" src="http://script2.js"></script>');
</script>

2 commentaires

Veuillez ne pas préconiser le document.write (), il s'agit d'une pratique horrible pour la performance, car elle bloque tout le reste tout en exécutant.


Comme on le voit ici ( Stackoverflow.com/questions/802854/... ) Il semble que son accord d'utiliser Document.Write dans des cas extrêmement simples comme mon exemple. être en désaccord?



0
votes

Si les scripts ne sont pas énormes et / ou il n'y a pas d'autre raison pour laquelle les deux ne devraient pas être chargés, je ferais quelque chose comme: xxx


1 commentaires

Les scripts sont externes à mon domaine et je ne leur ai pas accès. Ce sont des entités séparées



3
votes

Vous pouvez faire quelque chose comme ceci:

document.getElementsByTagName("head")[0].appendChild(file)


0 commentaires

0
votes

Vous devez émettre l'édition du bloc de script souhaité dans votre état ou créez la balise script à l'aide de la DOM et insérez-la. http://ajaxpatterns.org/on-demand_javascript


0 commentaires

0
votes

ces fichiers script1.js et script2.js sont votre ou êtes-vous inclus dans eux d'un autre domaine?

Parce que si vous êtes à vous, vous pouvez inclure les deux et dépend de votre condition que vous pouvez appeler des fonctions à l'intérieur des fichiers.


2 commentaires

ce ne sont pas mes fichiers et ne vivent pas sur mon domaine


Donc, la meilleure solution à partir de Ryan McGrath!



0
votes

C'est généralement une mauvaise idée, je vous recommande donc de nous dire ce que vous devez réellement faire afin que nous puissions trouver une meilleure solution pour vous. En général, vous souhaitez combiner et minifier tout JavaScript sur la page afin que l'utilisateur ne doive la charger qu'une seule fois.

S'il n'y a pas d'autre manière que vous pouvez le faire comme ceci: P>

<script type="text/javascript">
    var script = document.createElement('script');
    if((b_condition){
        script.src = 'script1.js';
    }else{
        script.src = 'script1.js';
    }
    document.body.appendChild(script);
</script>


0 commentaires

16
votes

Qu'est-ce que diable? Pourquoi sur Terre est-ce que tout le monde est ici préconisant le document.write ()? Assez certain que nous avons dépassé cela comme pratique standard par ce point; document.write n'est même pas valide si vous êtes dans un paramètre XHTML.

La meilleure façon de le faire serait comme suit (aussi ici, pour une meilleure mise en évidence / analyse: Httptps://gist.github.com/767131 ): p>

/*  Since script loading is dynamic/async, we take
    a callback function with our loadScript call
    that executes once the script is done downloading/parsing
    on the page.
*/
var loadScript = function(src, callbackfn) {
    var newScript = document.createElement("script");
    newScript.type = "text/javascript";
    newScript.setAttribute("async", "true");
    newScript.setAttribute("src", src);

    if(newScript.readyState) {
        newScript.onreadystatechange = function() {
            if(/loaded|complete/.test(newScript.readyState)) callbackfn();
        }
    } else {
        newScript.addEventListener("load", callbackfn, false);
    }

    document.documentElement.firstChild.appendChild(newScript);
}

if(a) {
    loadScript("lulz.js", function() { ... });
} else {
    loadScript("other_lulz.js", function() { ... });
}


0 commentaires

1
votes

J'ai utilisé cela et ça fonctionne bien:

<script type="text/javascript">
if(b_condition)
  document.write('<scri'+'pt src="http://script1.js"></'+'script>');
else
  document.write('<scri'+'pt src="http://scripts2.js"></'+'script>');
</script>


1 commentaires

Très intelligent, je ne pensais pas à ça.



-2
votes
<?php if (a_condition) {?>
put html code here or script or whatever you like
<?php } elseif(b_condition) {?>
put any other code here 
<?php } else {?>
put even more code
<?php } ?>

0 commentaires

1
votes
   <script type="text/javascript">     
    if(condition==true)
    {
        var src = "js/testing_true.js";
        var newScript = document.createElement("script");
        newScript.type = "text/javascript";
        newScript.setAttribute("async", "true");
        newScript.setAttribute("src", src);
        document.body.appendChild(newScript);
    }else
    {

        var src = "js/testing_false.js";
        var newScript = document.createElement("script");
        newScript.type = "text/javascript";
        newScript.setAttribute("async", "true");
        newScript.setAttribute("src", src);
        document.body.appendChild(newScript);
    }
</script>

0 commentaires