2 votes

Dans IE, lors de la liaison avec l'événement "load" d'un IFRAME, this.contentDocument est indéfini.

Ok, soyez indulgents avec moi les gars, la préparation de celui-ci est longue.

J'ai une page simple. Elle charge une iframe. Dans cette iframe se trouve un formulaire. Je veux que le formulaire à l'intérieur de l'iframe interagisse avec la page parent via jQuery.

Cela fonctionne correctement dans Firefox, Chrome et Safari. Voyez par vous-même ici :

http://dl.dropbox.com/u/58785/iframe-example/index.htm

Cependant, dans Internet Explorer 6/7/8/9, cela ne fonctionne pas. L'événement de chargement se déclenche, mais jQuery ne peut pas prendre en charge les éléments à l'intérieur de l'iframe.

J'utilise le deuxième argument "context" de la fonction jQuery pour définir le contexte du sélecteur, comme ceci : var form = $('#myform'), this.contentDocument)

Voici ce qui est bizarre . En utilisant les outils de développement F12 dans IE9, je peux définir un point d'arrêt dans mon JavaScript et voir comment IE évalue le JavaScript. Si je passe la souris sur this je peux voir qu'il y a une contentDocument propriété. MAIS si je passe la souris sur this.contentDocument il me dit que c'est indéfini.

Shows up as defined

Shows up as undefined

Parce qu'il est indéfini, le sélecteur jQuery ne renvoie aucun élément. Encore une fois, cela ne se produit que dans IE. Et l'IFRAME est sur le même domaine, donc ce n'est pas un problème de same-origin.

Des conseils ?

2voto

voithos Points 15066

Sans vouloir empiéter sur la réponse de Roatin, ce problème peut également être résolu en spécifiant une déclaration DOCTYPE. Internet Explorer 8 et plus l'exigent pour contentDocument. Sinon, comme il l'a dit, contentWindow peut être utilisé (pour les versions antérieures d'IE également). Voir l'information à W3Schools .

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