Question

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

src="myscript.js?config=true"

Mon JS peut-il lire directement la valeur de cette variable comme ceci?

alert (config);

Cela ne fonctionne pas et la console d'erreur FireFox indique que "la configuration n'est pas définie". Comment lire les vars transmis via l'attribut src dans le fichier JS? Est-ce aussi simple?

Était-ce utile?

La solution

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

Vous ne pouvez pas transmettre de variables à JS comme vous l'avez essayé. La balise SCRIPT ne crée pas d'objet Window (comportant une chaîne de requête) et il ne s'agit pas d'un code côté serveur.

Autres conseils

Oui, vous le pouvez, mais vous devez connaître le nom exact du fichier de script 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' avec les arguments passés. Je ne l'ai pas testé, je l'ai légèrement modifié depuis http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js où cela fonctionne.

Vous avez peut-être vu cela se produire, mais en réalité, le fichier JS est prétraité côté serveur en utilisant PHP ou un autre langage. Le code côté serveur va imprimer / faire écho le javascript avec les variables définies. J'ai déjà vu un service de publicité scripté le faire auparavant, ce qui m'a permis de voir si cela pouvait être fait avec de simples erreurs, mais cela ne peut pas.

Vous devez utiliser Javascript pour trouver l'attribut src du script et analyser les variables après le '?'. Avec le framework Prototype.js, quelque chose 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(/\?.*([a-z,]*)/);
    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. Arraché directement du fichier scriptaculous.js!

Votre script peut toutefois localiser son propre noeud de script, examiner l'attribut src et extraire les informations de votre choix.

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

Cela DEVRAIT ou non être fait, la question est légitime, mais si vous souhaitez le faire, http://feather.elektrum.org/book/src.html montre vraiment comment. En supposant que votre navigateur bloque lors du rendu des balises de script (actuellement vrai, mais ne peut être conservé à l’avenir), le script en question est toujours le dernier script de la page jusqu’à ce point.

Ensuite, en utilisant des frameworks et des plugins tels que jQuery et http://plugins.jquery.com/project/ parseQuery cela devient assez trivial. Surpris, il n'y a pas encore de plugin pour cela.

Les balises de script dégradantes de John Resig sont un peu liées, mais elles exécutent le code APRÈS le script externe, et non dans le cadre de l'initialisation: http://ejohn.org/blog/degrading-script-tags/

Crédits: Définition de paramètres pour les fichiers JavaScript , Passage de paramètres aux fichiers JavaScript

L'utilisation de variables globales n'est pas une solution aussi propre ou sûre. Vous pouvez plutôt utiliser les attributs de data-X, elle est plus propre et plus sûre:

<script type="text/javascript" data-parameter_1="value_1" ... src="/js/myfile.js"></script>

À partir de myfile.js, vous pouvez accéder aux paramètres de données, par exemple avec jQuery:

var parameter1 = $('script[src*="myfile.js"]').data('parameter_1');

Évidemment, "myfile.is" et " paramètre_1 " correspondre aux 2 sources;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top