2010-12-11 8 views
0

Je construis un webservice qui combine automatiquement et minimise le javascript d'un site Web. Le propriétaire du site Web inclura simplement l'extrait js suivant dans la tête du site Web, créera le fichier minifié et l'ajoutera à l'élément head. Le problème que je vois est que lorsqu'un script est ajouté dynamiquement, il n'est pas nécessairement exécuté avant le reste du corps. Étant donné que de nombreux sites peuvent s'attendre à ce que les scripts d'en-tête s'exécutent avant la génération du corps, il s'agit d'un problème.Insérer dynamiquement le script et exécuter immédiatement

Est-il possible de forcer l'exécution du script ajouté dynamiquement avant toute autre chose? Peut-être y a-t-il une solution de contournement, comme enlever tout le corps et le réinsérer après que le script d'ajout se charge ... bien que cela semble assez hacky.

<script type="text/javascript"> 
    var minify_files = new Array(
     'domain.com/js/one.js', 
     'domain.com/js/two.js', 
     'domain.com/js/three.js' 
    ); 
</script> 
<script type="text/javascript" src="minifyservice.com/minify.js"></script> 
+0

Ecrivez ce que vous envisagez d'exécuter en tant que fonction et appelez-le de l'intérieur, une fois que vous insérez le script que votre fonction va exécuter. – Babiker

+0

Impossible de faire cela parce que ce qui est exécuté est une version minifiée et combinée de tous les fichiers dans le tableau "minify_files". Le but de ce service est que les propriétaires de sites intègrent simplement le code ci-dessus et que cela fonctionne. – makeee

+0

alors vous avez besoin de votre script que vous fournissez pour être exécuté en premier? Est-il raisonnable de s'attendre à ce que vos utilisateurs placent le script en haut de la page – user406905

Répondre

0
<script type="text/javascript" src="minifyservice.com/minify.js"></script> 

irait devant le code

<script type="text/javascript"> 
    minify_files([ 
     'domain.com/js/one.js', 
     'domain.com/js/two.js', 
     'domain.com/js/three.js' 
    ]); 
</script> 

ou quelque chose de similaire serait probablement mieux travailler de l'utilisateur. minify.js définirait la fonction minify_files qui serait quelque chose comme ceci:

function minify_files(paths) { 
    var query=""; 
    for (var i = 0; i < paths.length; i++) { 
     query += encodeURIComponent(paths[i]); 
     query += i < paths.length - 1 ? "&" : ""; 
    } 
    document.write(
     "<scri" + "pt src=\"minifyservice?" + 
     query + "\"><scri" + "pt>" 
    ); 
} 

non testé. Mais devrait être un bon point de départ. En raison de document.write, il va bloquer et assurer le chargement des scripts avant le chargement de la page, mais ne fonctionnera que lorsque la page aura fini de s'afficher. (Gardez-le dans la tête ou au moins avant de fermer la balise body.)

0
  • je pense que vous devrez demander/exiger que les utilisateurs placent la balise de script avant tout autre actif. Placez votre tableau de script dans querystring.
  • moissonneuses-batteuses de service back-end et retourne le script

<script type="text/javascript" src="site.com/mini.js?script1&script2"></script>

Questions connexes