2009-07-30 2 views
6

Assez simple, j'ai un script JS qui est inclus sur de nombreux sites différents et doit avoir des paramètres passés à lui.Y at-il un analogue dans Javascript à la variable __FILE__ en PHP?

Il serait utile que celles-ci pourraient être transmis via l'URL, par exemple:

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

Oui, vous pouvez toujours pré-remplir des variables, dans une balise de script distinct, mais il est un tantinet désordonné et moins facile pour passer:

<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 –

Répondre

1

error.fileName vous dira le fichier qu'un script est de (pas sûr si cela fonctionne dans tous les navigateurs, je l'ai testé dans Firefox & Opera)

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

Pas de go dans IE et Chrome. –

+0

Ceci est très proche, et étant donné IE étant ... eh bien, IE, je suis sûr à 90%, il y a un équivalent spécifique à ce navigateur. –

0

Pour faire quelque chose comme ça, vous devez utiliser un langage côté serveur pour rendre le JS pour vous.

Je ne le recommanderais pas.

2

Cette méthode ne doit être utilisée que si les variables déterminent ce que le code JavaScript a été chargé (par exemple, avec la demande traitée par PHP, la construction dynamique du fichier JS).

Si vous souhaitez transmettre des informations à du code JavaScript, utilisez des fonctions ou des variables dans le code après son chargement.

3

Yep. Bonus ajouté: Je convertis les paramètres de la chaîne de requête en un hachage javascript plus utilisable.

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

Vraiment bonne approche, mais il faut spooling à travers le DOM terminé qui peut ne pas être fiable. –

+0

@Paul: pas de mise en file d'attente ici. Le DOM n'a pas besoin d'être "complété" pour que 'document.getElementsByTagName' fonctionne. –

+0

Comment cela fonctionne-t-il avec l'attribut 'async' /' defer'? est 'scriptSource()' fonction fiable écrit comme ça? – iiic

Questions connexes