2011-12-30 10 views
7

Mi sono appena imbattuto nello this sample code, che ha un tag script con un'origine esterna e un corpo. Presumo che questo sia un modo intelligente per passare alcune informazioni allo script incluso. Come funziona?Tag di script con origine e corpo esterni

<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

Non penso che sia tanto una questione di come funziona che se questo fa la differenza nell'esecuzione del codice. – Purag

risposta

6

Lo script contenuto nei tag non verrà valutato in circostanze normali. Quello che penso stia accadendo nel tuo esempio è che remoteStorage.js sta leggendo il contenuto stesso mentre viene valutato. qualcosa di simile

//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); 

Anche se questo sembra pulito nel markup, io stesso sarebbe solo utilizzare un tag script separato ed evitare questa valutazione forzata.

2

Non dovrebbe funzionare. Lo stato html specs indica che se è presente un attributo src sul tag di script, il contenuto di <script></script> deve essere ignorato e deve essere eseguito solo il codice nella posizione src.

D'altra parte, questo si degraderebbe con garbo sui browser che comprendono javascript, ma non sono abbastanza nuovi da supportare il codice JS esterno. Se esistono browser come questo, chissà, ma in generale, il codice onchange nel tuo snippet NON dovrebbe essere eseguito da nessun browser moderno decente.

+0

Se quello che dici è vero, questo codice non ha alcun senso. In qualche modo ne dubito. – Thilo

+0

Hanno anche istruzioni esplicite per scrivere il tag script come questo: "All'interno dell'elemento , specificare" onChange "e" categoria "come sotto" – Thilo

+0

È vero secondo le specifiche. Sfortunatamente ci sono troppi browser non validi (* koff * microsoft * koff *) che trattano le specifiche come battute e fanno le loro cose. –

3

Sebbene i browser ignorino il contenuto di un elemento script quando ha un attributo src, ciò significa semplicemente che non lo elaborano nel modo normale (analisi ed esecuzione come codice JavaScript). I contenuti sono ancora memorizzati nel DOM e possono essere letti da uno script. Il contenuto potrebbe essere qualsiasi cosa quindi, non necessariamente codice JavaScript ma qualsiasi dato.

Problemi correlati