2009-07-30 7 views
6

Bastante sencillo, tengo un script JS que está incluido en muchos sitios diferentes y necesita tener parámetros pasados.¿Hay algún análogo en Javascript para la variable __FILE__ en PHP?

Sería útil si los que podrían ser pasados ​​a través de la URL, por ejemplo:

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

Sí, todavía se puede rellenar previamente las variables, en una etiqueta de secuencia de comandos independiente, pero es una pizca desordenado y menos fácil para pasar:

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

Respuesta

1

error.fileName le dirá que el archivo es un script de (no estoy seguro si funciona en todos los navegadores, yo he probado en Firefox Opera &)

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

No vayas en IE y Chrome. –

+0

Esto está muy cerca, y dado que IE es ... bueno, IE, estoy 90% seguro de que hay un navegador específico equivalente a esto. –

0

Para hacer algo como eso necesitarías usar un lenguaje del lado del servidor para renderizar el JS por ti.

No lo recomendaría.

2

Este método solo se debe utilizar si los varaibles determinan qué código de JavaScript se cargó (por ejemplo, con la solicitud procesada por PHP, compilando dinámicamente el archivo JS).

Si desea pasar información al código JavaScript, use funciones o variables en el código después de que se cargue.

3

Sip. Bono adicional: convierto los parámetros de cadena de consulta en un hash de JavaScript más útil.

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

Enfoque realmente bueno, pero requiere el spooling a través del DOM completo que puede no ser confiable. –

+0

@Paul: no hay spooling aquí. El DOM no tiene que ser "completado" para que funcione 'document.getElementsByTagName'. –

+0

¿Cómo funciona esto con el atributo 'async' /' defer'? ¿La función 'scriptSource()' es confiable y está escrita así? – iiic

Cuestiones relacionadas