3 votes

Existe-t-il un rappel pour les affectations element.innerHTML ?

Lorsque vous utilisez Head.js et la définition de l'attribut .src d'un élément script, il existe une méthode de rappel qui est appelée lorsque le script est prêt.

Cependant, je voulais charger un script en assignant du texte à .innerHTML. En faisant cela, le même rappel ne s'est pas déclenché lorsque j'ai mis à jour/édité le code pour utiliser cette propriété à la place.

/*addScriptText1
** modified from head.js
**
**
*/
function addScriptText1(file_name, callback, key) {
    var element = document.createElement('script');
    element.async = true;
    element.innerHTML = localStorage[file_name];
    element.onreadystatechange = element.onload = function () {
        $A.log('callback for element called');
        if ((!element.readyState || /loaded|complete/.test(element.readyState))) {
            localStorage[key + '_loaded'] = true;
            callback();
        }
    };
    document.head.appendChild(element);
}

1voto

loganfsmyth Points 25483

Les scripts sont exécutés immédiatement lorsque les scripts en ligne sont insérés dans le DOM. Tout ceci se passe de manière synchrone, donc vous n'avez pas besoin de callback.

async n'a aucun effet ici car vous ne faites pas de demande de réseau. De même, le readyState n'est pas utile car vous le créez de manière programmatique, donc le script va être immédiatement chargé.

1voto

mwilcox Points 2091

L'utilisation de innerHTML sur un élément script n'est pas prise en charge par les différents navigateurs (y compris Firefox). Je ne recommanderais pas cette approche. Je suggérerais plutôt eval o nouvelle fonction à la place.

Peut-on insérer des scripts avec innerHTML ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X