2011-12-30 13 views
7

Me encontré con this sample code, que tiene una etiqueta de script con una fuente externa y un cuerpo. Supongo que esta es una forma inteligente de pasar cierta información al script incluido. ¿Cómo funciona?Etiqueta de script con fuente externa y cuerpo

<html> 
    <head> 
    <script src="http://unhosted.org/remoteStorage.js">{ 
     onChange: function(key, oldValue, newValue) { 
     if(key=='text') { 
      document.getElementById('textfield').value= newValue; 
     } 
     }, 
     category: 'documents' 
    }</script> 
    </head> 
+0

No creo que se trate tanto de cómo funciona, sino de si esto hace una diferencia en la ejecución del código. – Purag

Respuesta

6

La secuencia de comandos que figura en las etiquetas no se evaluará en circunstancias normales. Lo que creo que está sucediendo en su ejemplo es que remoteStorage.js está leyendo los contenidos a medida que se evalúan. algo como esto

//grab the last script tag in the DOM 
//this will always be the one that is currently evaluating during load 
var tags = document.getElementsByTagName('script'); 
var tag = tags[tags.length -1]; 
//force evaluation of the contents 
eval(tag.innerHTML); 

Aunque esto se ve bien en el marcado, yo mismo sería sólo tiene que utilizar una etiqueta de secuencia de comandos independiente y evitar esta evaluación forzada.

2

No debería funcionar. El html specs indica que si hay un atributo src en la etiqueta del script, el contenido del <script></script> debe ignorarse y solo debe ejecutarse el código en la ubicación src.

Por otro lado, esto se degradaría con gracia en los navegadores que entienden javascript, pero no son lo suficientemente nuevos como para admitir código JS externo. Si existen navegadores como este, quién sabe, pero en términos generales, el código de intercambio en su fragmento NO debe ser ejecutado por ningún navegador moderno decente.

+0

Si lo que dices es cierto, este código no tiene ningún sentido. De alguna manera lo dudo. – Thilo

+0

Incluso tienen instrucciones explícitas para escribir la etiqueta de script de esta manera: "Dentro del elemento , especifique 'onChange' y 'category' como a continuación" – Thilo

+0

Es cierto según la especificación. Lamentablemente, hay demasiados navegadores malos (* koff * microsoft * koff *) que tratan las especificaciones como bromas y hacen lo suyo. –

3

Aunque se dice que los navegadores ignoran el contenido de un elemento script cuando tiene un atributo src, esto simplemente significa que no lo procesan de la forma habitual (analizar y ejecutar como código JavaScript). Los contenidos todavía se almacenan en el DOM y se pueden leer mediante un script. Los contenidos podrían ser prácticamente cualquier cosa, no necesariamente el código JavaScript, sino cualquier dato.

Cuestiones relacionadas