2009-07-30 30 views
6

Piuttosto semplice, ho uno script JS che è incluso in molti siti diversi e deve avere i parametri passati ad esso.C'è qualche analogo in Javascript per la variabile __FILE__ in PHP?

Sarebbe utile se questi potrebbero essere passati attraverso l'URL, ad esempio:

<script type="text/javascript" 
    src="http://path.to/script.js?var1=something&var2=somethingelse"></script> 

Sì, è ancora possibile pre-compilare le variabili, in un tag script separato, ma è uno smidge disordinato e meno facile per passare in giro:

<script type="text/javascript">var1=something; var2=somethingelse</script> 
<script type="text/javascript" src="http://path.to/script.js"></script> 
+0

http://stackoverflow.com/questions/1017424/pass-vars-to-javascript-via-the-src-attribute/1017461 # 1017461 –

risposta

1

error.fileName vi dirà il file uno script è da (non so se funziona in tutti i browser, che ho provato in Firefox & Opera)

var filename = (new Error).fileName; 
+2

No go in IE e Chrome. –

+0

Questo è molto vicino, e dato che IE è ... beh, IE, sono sicuro al 90% che ci sia un equivalente specifico del browser per questo. –

0

Per fare qualcosa di simile, è necessario utilizzare un linguaggio lato server per rendere il JS per voi.

Non lo consiglierei.

2

Questo metodo deve essere utilizzato solo se le variabili determinano il codice JavaScript caricato (ad esempio, con la richiesta elaborata da PHP, creazione dinamica del file JS).

Se si desidera passare le informazioni al codice JavaScript, utilizzare funzioni o variabili nel codice dopo che è stato caricato.

3

Yep. Bonus aggiuntivo: converto i parametri della stringa di query in un hash javascript più utilizzabile.

HTML:

<script src="script.js?var1=something&var2=somethingelse" type="text/javascript"></script> 

script.js:

var scriptSource = (function() { 
    var scripts = document.getElementsByTagName('script'); 
    return scripts[scripts.length - 1].src 
}()); 

var params = parseQueryString(scriptSource.split('?')[1]); 

params.var1; // 'something' 
params.var2; // 'somethingelse' 

// Utility function to convert "a=b&c=d" into { a:'b', c:'d' } 
function parseQueryString(queryString) { 
    var params = {}; 
    if (queryString) { 
     var keyValues = queryString.split('&'); 
     for (var i=0; i < keyValues.length; i++) { 
      var pair = keyValues[i].split('='); 
      params[pair[0]] = pair[1]; 
     } 
    } 
    return params; 
} 
+0

Approccio davvero buono, ma richiede lo spooling attraverso il DOM completo che potrebbe non essere affidabile. –

+0

@Paul: nessuno spooling qui. Il DOM non deve essere "completato" per "document.getElementsByTagName" per funzionare. –

+0

Come funziona con l'attributo 'async' /' defer'? la funzione 'scriptSource()' è scritta in modo affidabile? – iiic

Problemi correlati