INVALID_STATE_ERR: DOM Exception 11 (WebKit)

J'ai récemment testé une application Cappuccino avec laquelle je travaillais avec Chrome et Safari. Je reçois l'erreur:

INVALID_STATE_ERR: DOM Exception 11: An attempt was made to use an object that is not, or is no longer, usable. 

Le manque d'informations est frustrant. Quel objet et où ai-je essayé de l'utiliser? Chrome essaie de répondre à la deuxième question, mais le numéro de ligne qu'il donne, 465, ne signifie rien lorsque le fichier qu'il donne est de seulement 94 lignes. Sans plus d'informations, je ne sais même pas où commencer à regarder.

Chrome canary offre des traces de pile pour les exceptions DOM!

Habituellement, cette erreur se produit avec XMLHttpRequest lorsque vous appelez la méthode open avec async = true, ou vous laissez le paramètre async indéfini afin qu'il soit par défaut asynchrone, puis vous accédez aux propriétés d'état ou de réponseText. Ces propriétés ne sont disponibles qu'après avoir effectué un appel synchrone, ou ReadyState devient prêt (une fois que l'appel asynchrone répond). Je vous suggère d'essayer d'abord avec async = false, puis de passer à la vérité et d'utiliser onReadyStateChange.

Dans mon cas, je réglais les en-têtes avant d'ouvrir la connexion. Pour éviter cette erreur, les en-têtes doivent être réglés après l'ouverture de la connexion:

 var fd = new FormData(); fd.append("fileToUpload", file); var xhr = new XMLHttpRequest(); xhr.open("POST", postUrl, true); xhr.setRequestHeader("cache-control", "no-cache"); xhr.send(fd); 

Je comprends que cette réponse est spécifique à mon problème et non le message générique INVALID_STATE_ERR: DOM Exception 11, mais j'ai pensé que je publierais ma solution ici pour la prochaine personne.

Cela peut également se produire lorsque Javascript essaie de document.write() dans une page XHTML ( Content-Type: application/xhtml+xml ).

Tout d'abord, je ne connais pas vraiment Cappucino ni ce que vous essayez de faire. Mais j'ai vu cela en travaillant avec Qt WebKit et des objets JavaScript. Il est arrivé après que l'objet de fenêtre javascript a été effacé, par exemple si je n'ai pas chargé mes objets JS natifs sur WebKit après la chargement de la nouvelle page.

Cela signifie essentiellement que vous essayez d'utiliser l'objet JavaScript supprimé en interne.

Dans ce cas, je crois que le problème résultait d'essayer de dessiner des images sur une toile en utilisant un remplissage de motif avec une image qui n'était pas complètement chargée. Cette question a été liée à la question Cappuccino 811 et mon raisonnement est basé sur les conseils d' aparajita pour s'assurer que l'image est chargée avant de tenter de l'utiliser comme remplissage de motif.

Pourtant, cette erreur est frustrantement opaque compte tenu de l'information clé (quel objet appelé) n'est pas évidente et les endroits où il peut surgir sont variés.

Cette erreur est également lancée lors de la tentative de modification de la propriété de value d'un <input type="file"

Il s'agit d'une vérification de sécurité.

Chrome et Safari ont été intégrés aux débogueurs. Assurez-vous d'utiliser le fichier index-debug.html pour lancer votre application pour obtenir un code facile à lire.

Dans Safari, accédez à Préférences et activez le menu Développeur. Ensuite, passez à Développement> Démarrer le débogage JavaScript. Utilisez l'icône de pause en bas à gauche pour configurer le débogueur pour qu'il s'arrête sur les erreurs. La prochaine fois que vous frappez le problème, le débogueur s'arrêtera à la ligne offensante et vous montrera comment il est arrivé à travers la trace de la pile.

Je l'ai vu se produire en essayant d'écrire dynamiquement un élément d' input[type="file"] avec son jeu d'attributs de value .

Lorsque j'ai supprimé la value attr de ce que je l'ai injecté, tout a fonctionné.

Dans un sens, je vois cette erreur comme signifiant "vous avez essayé de faire quelque chose que la spécification ne permet pas" en fonction de cet article ici – http://designbyjeeba.blogspot.com/2011/04/dreaded-invalidstateerr-dom-exception .html

J'aimerais ajouter ceci. Obtenez ce bug sur un Samsung S4 et S5 en utilisant le navigateur stock.

De mon côté, il a été causé par essayer de lire un fichier audio qui n'a pas encore chargé.

Cette question SO couvre le même problème: Exception DOM 11