È sicuro assumere che l'ultimo elemento script
* nel documento quando lo script è in esecuzione ** è lo script attualmente in esecuzione?È l'ultimo elemento `script` lo script attualmente in esecuzione?
Ad esempio, voglio creare uno script che può essere rilasciato ovunque nel corpo di una pagina e visualizzare un elemento nella stessa posizione. Sto facendo qualcosa del genere:
function getCurrentScriptElement() {
var scripts = document.getElementsByTagName('script');
return scripts[scripts.length - 1];
}
var script = getCurrentScriptElement();
var view = document.createElement('span');
/* Put stuff in our view... */
script.parentNode.insertBefore(view, script);
Supponendo che lo script sia nel corpo del documento, è questo "sicuro?" La funzione getCurrentScriptElement
restituirà sempre lo script in esecuzione? In caso contrario, come può essere fatto?
Mi piacerebbe farlo senza legare lo script a uno specifico attributo id o simile, mi piacerebbe che fosse solo posizionale.
ho creato un esempio here che tira in this script. Una risposta suggeriva che altri script potevano creare una condizione in cui un esempio come questo si sarebbe rotto. È possibile aggiungere altri script a questo esempio che lo romperanno?
è stato suggerito che altri script con defer
o async
attributi potrebbe rompere questo. Qualcuno può dare un esempio di come potrebbe funzionare uno script del genere?
Come ho capito, defer
significa caricare prima il DOM, quindi eseguire lo script con il tag defer
. In che modo l'attributo defer
visualizzato su un altro elemento di script influisce sul comportamento di getCurrentScriptElement
?
async
, se ho capito bene, significa iniziare il recupero che lo script e mantenere l'analisi del DOM, allo stesso tempo, non aspettare ... ma quando colpisce mia sceneggiatura dovrebbe comunque fermarsi e attendere, giusto?
Non vedo come uno potrebbe influire, qualcuno può fornire un esempio?
* Sono interessato solo a script esterni ai fini di questa domanda.
** Non l'ultimo elemento script
nell'intero documento, ma l'ultimo elemento script
nel documento al momento dell'esecuzione. Il resto del documento non dovrebbe essere ancora caricato, giusto?
Bene, per cominciare, il tuo esempio non sembra funzionare in IE9. – poke
@poke, non importa;) –