Domanda

Nel mio file HTML ho collegato a JS con:

src="myscript.js?config=true"

Il mio JS può leggere direttamente il valore di questo var in questo modo?

alert (config);

Questo non funziona e la Console di errore FireFox dice che "config non è definito". Come posso leggere i var passati attraverso l'attributo src nel file JS? È così semplice?

È stato utile?

Soluzione

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

Non puoi passare variabili a JS nel modo in cui hai provato. Il tag SCRIPT non crea un oggetto Window (che ha una stringa di query) e non è un codice lato server.

Altri suggerimenti

Sì, puoi, ma devi conoscere il nome esatto del file di script nello 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;
  }
}

Ora hai una variabile 'opzioni' che ha gli argomenti passati. Non l'ho provato, l'ho cambiato un po 'da http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js dove funziona.

Potresti averlo visto fatto, ma in realtà il file JS viene preelaborato sul lato server utilizzando prima PHP o un'altra lingua. Il codice lato server stamperà / ripeterà il javascript con le variabili impostate. Ho già visto un servizio di annunci con script fare questo prima, e mi ha fatto vedere se può essere fatto con semplici vecchi, ma non può.

Devi usare Javascript per trovare l'attributo src dello script e analizzare le variabili dopo '?'. Utilizzando il framework Prototype.js, sembra qualcosa come questo:

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" ??
});

Le mie abilità Javascript / RegEx sono arrugginite, ma questa è l'idea generale. Strappato direttamente dal file scriptaculous.js!

Il tuo script può tuttavia individuare il proprio nodo di script ed esaminare l'attributo src ed estrarre qualsiasi informazione ti piaccia.

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

Se questo DOVREBBE essere fatto o meno, è una domanda giusta, ma se vuoi farlo, http://feather.elektrum.org/book/src.html mostra davvero come. Supponendo che il tuo browser blocchi durante il rendering dei tag di script (attualmente vero, ma potrebbe non essere a prova di futuro), lo script in questione è sempre l'ultimo script della pagina fino a quel momento.

Quindi usando alcuni framework e plugin come jQuery e http://plugins.jquery.com/project/ parseQuery questo diventa piuttosto banale. Sorpreso non c'è ancora un plugin per questo.

In qualche modo correlati sono i tag di script degradanti di John Resig, ma che eseguono il codice DOPO lo script esterno, non come parte dell'inizializzazione: http://ejohn.org/blog/degrading-script-tags/

Crediti: Passaggio dei parametri ai file JavaScript , Passaggio dei parametri ai file JavaScript

L'uso delle variabili globali non è una soluzione così pulita o sicura, invece puoi usare gli attributi data-X, è più pulito e sicuro:

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

Da myfile.js è possibile accedere ai parametri dei dati, ad esempio con jQuery:

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

Ovviamente " myfile.is " e " parametro_1 " devono corrispondere nelle 2 fonti;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top