2016-03-30 8 views
5

E 'garantito che questo codiceSarà iniettato JS finitura codice prima di rimuovere

function runEmbeddedJSInPageEnvironment(code) { 
    var e = document.createElement('script'); 
    e.type = 'text/javascript'; 
    e.appendChild(document.createTextNode(code)); 
    (document.head || document.documentElement).appendChild(e); 
    e.parentNode.removeChild(e); 
} 

runEmbeddedJSInPageEnvironment("$('#someform').off('submit');"); 

attenderà il codice passato al runEmbeddedJSInPageEnvironment per arrivare primi, e solo poi rimuoverlo dalla pagina chiamando removeChild funzione?

Oppure può essere rimosso prima che il codice venga completato?

+0

Penso che dipenda dai browser – llamerr

+1

meglio assicurati e aggiungi 'scr.onload' - http://stackoverflow.com/questions/1293367/how-to-detect-if-javascript-files-are-loaded (e rimuovi bambino in seguito) – llamerr

+0

Vorrei usare la coda come qui - http://stackoverflow.com/questions/899102/how-do-i-store-javascript-functions-in-a-queue-for-them-to- essere-eseguito eventuall –

risposta

3

Sì, in base a HTML5 il codice verrà eseguito prima di rimuovere l'elemento script.

Quando si inserisce nel documento, è subito prepared:

Quando un elemento script non contrassegnato come "parser-inserted" esperienze uno degli eventi elencati nel seguente elenco, l'utente deve prepare sincrono l'elemento script:

Al passo 15 della prepare a script dell'algoritmo, dal momento che il script non ha un attributo src e non è stato contrassegnato come "parser inserted", il tuo caso sarebbe l'ultimo:

Altrimenti: L'interprete deve immediatamente execute the script block, anche se altri script sono già in esecuzione.

Ma ovviamente, se lo script ha un codice asincrono come setTimeout, verrà posticipato.

Problemi correlati