Passez vars à JavaScript via l'attribut SRC

Dans mon fichier HTML, j'ai lié le JS avec:

src="myscript.js?config=true" 

Est-ce que mon JS peut lire directement la valeur de cette var comme ça?

 alert (config); 

Cela ne fonctionne pas, et la console d'erreur FireFox dit que "config n'est pas défini". Comment lire les vars passés via l'attribut src dans le fichier JS? Est-ce que c'est simple?

 <script> var config=true; </script> <script src="myscript.js"></script> 

Vous ne pouvez pas transmettre des variables à JS comme vous avez essayé. La balise SCRIPT ne crée pas d'objet Window (qui possède une chaîne de requête), et ce n'est pas le code côté serveur.

Oui, vous pouvez, mais vous devez connaître le nom du fichier de script exact dans le script:

 var libFileName = 'myscript.js', scripts = document.head.getElementsByTagName("script"), i, j, src, parts, basePath, options = {}; for (i = 0; i < scripts.length; i++) { src = scripts[i].src; if (src.indexOf(libFileName) != -1) { parts = src.split('?'); basePath = parts[0].replace(libFileName, ''); if (parts[1]) { var opt = parts[1].split('&'); for (j = opt.length-1; j >= 0; --j) { var pair = opt[j].split('='); options[pair[0]] = pair[1]; } } break; } } 

Vous avez maintenant une variable 'options' qui a les arguments passés. Je ne l'ai pas testé, j'ai changé un peu de http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js où cela fonctionne.

Vous devez utiliser Javascript pour trouver l'attribut src du script et analyser les variables après le '?'. En utilisant le cadre Prototype.js, il ressemble à ceci:

 var js = /myscript\.js(\?.*)?$/; // regex to match .js var jsfile = $$('head script[src]').findAll(function(s) { return s.src.match(js); }).each(function(s) { var path = s.src.replace(js, ''), includes = s.src.match(/\?.*([az,]*)/); config = (includes ? includes[1].split('='); alert(config[1]); // should alert "true" ?? }); 

Mes compétences Javascript / RegEx sont rouillées, mais c'est l'idée générale. Déchiré directement du fichier scriptaculous.js!

Vous avez peut-être déjà vu cela, mais le fichier JS est déjà utilisé en préprocesseur en utilisant PHP ou une autre langue. Le code côté serveur imprimera / échoit le javascript avec les variables définies. J'ai vu un service de publicité par script faire cela auparavant, et cela m'a permis de voir si cela peut être fait avec des js simples, mais cela ne peut pas.

Votre script peut toutefois localiser son propre noeud de script et examiner l'attribut src et extraire toutes les informations que vous souhaitez.

  var scripts = document.getElementsByTagName ('script'); for (var s, i = scripts.length; i && (s = scripts[--i]);) { if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) { alert ("Parameter string : '" + s[3] + "'"); break; } } 

Que cela soit ou non fait, une question équitable, mais si vous voulez le faire, http://feather.elektrum.org/book/src.html montre vraiment comment. En supposant que votre navigateur bloque le rendu des balises de script (actuellement vrai, mais peut ne pas être une preuve future), le script en question est toujours le dernier script de la page jusqu'à ce point.

Ensuite, en utilisant un cadre et un plugin comme jQuery et http://plugins.jquery.com/project/parseQuery, cela devient plutôt trivial. Surpris, il n'y a pas encore de plugin.

Un peu apparenté est les étiquettes de script dégradantes de John Resig, mais cela gère le code APRÈS le script externe, pas dans le cadre de l'initialisation: http://ejohn.org/blog/degrading-script-tags/

Crédits: Passer des paramètres aux fichiers JavaScript , Passer des paramètres aux fichiers JavaScript