2011-05-26 11 views
10

Estaba viendo FireBug Lite y vi que usan una técnica muy buena para pasar opciones a un archivo de script externo.Objeto JSON pasado a JavaScript externo - Técnica fresca

<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"> 
{ 
    overrideConsole: false, 
    startInNewWindow: true, 
    startOpened: true, 
    enableTrace: true 
} 
</script> 

Me preguntaba si alguien sabe el nombre de esta técnica y dónde puedo encontrar más información sobre ella o cómo funciona. Parece muy bueno. ¡Gracias!

+0

Es esto similar a JSONP? http://en.m.wikipedia.org/wiki/JSONP – mason

Respuesta

4

No es una técnica automática de pase variable, como usted puede pensar.

Toda su código hace es recorrer todos los script etiquetas hasta que encuentren la que ha cargado el código (comparando el atributo src a una expresión regular (/(firebug-lite(?:-\w+)?(?:\.js|\.jgz))(?:#(.+))?$/;).

Si se encuentra la etiqueta, simplemente Obtiene el .innerHTML de la etiqueta script, y lo evalúa.

supongo que esto (sin nombre) techique no es relevante en el mundo real, ya que no tenemos un método garantizado de hallazgo que script etiqueta se refiere a nuestra biblioteca (especialmente porque es común que todos los scripts se combinen en un archivo de script en l ive servidores).

Además, tengo mis dudas sobre cómo es esto; ya que sin duda no pasa por el spec, que establece:

Una vez dicho esto (y pensado en ello): el spec afirma que el navegador no debe interpretar ambos. Sin embargo, esto no es relevante con esta técnica. El navegador no tiene que intervenir a la vez, ya que el contenido del script se lee en innerHTML (e incluso si lo hizo en el contenido, de todos modos no causa ningún daño). Mientras el navegador cumpla con las especificaciones y cargue el URI (que todos los navegadores usan), ¡no hay problema! (además de no saber/garantizar a qué etiqueta script pertenece su biblioteca).

El script se puede definir dentro de los contenido del elemento de secuencia de comandos o en un archivo externo. Si no se establece el atributo src , los agentes de usuario deben interpretar el contenido del elemento como el script . Si el src tiene un valor de URI, los agentes de usuario deben ignorar los contenidos del elemento y recuperar el script a través del URI.

(es decir, no interpreto ambos).

+1

Abra el archivo https://getfirebug.com/firebug-lite.js; y busque 'var getScriptURL' y 'var options = fileOptions.split (",");' –

+0

@Theo: 'fileOptions' son para las" Opciones de Script URL "(http://getfirebug.com/firebuglite#ScriptURLOptions). ¿Para qué quieres que mire 'getScriptUrl'? – Matt

+0

@Matt No me refería a usted, estaba agregando a su respuesta. Quise decir 'var url = getScriptURL (script);', es donde sucede lo que explicaste. –

2

Además de @ respuesta de Matt, y para aclarar mi comentario:

var doc = Firebug.browser.document; 
var script = doc.getElementsByTagName("script")[index]; 
var url = getScriptURL(script); 
var isExternal = url && url != doc.location.href; 

try 
{ 
    if(isExternal) 
    { 
    Ajax.request({url:url, onSuccess:renderProcess, onFailure:onFailure}) 
    } 
    else 
    { 
    var src = script.innerHTML; 
    renderProcess(src) 
    } 
} 
catch(e) 
{ 
    onFailure() 
} 
Cuestiones relacionadas