Jquery.append() Iframe IE Problem

katamshut

Grünschnabel
Hallo

Nun folgendes Problem plagt mich seit langem. Ich versuche aus einem IFrame raus ein Element im eltern dokument einzupflanzen. Das geht beim IE7 aber nicht (warscheinlich auch bei allen andern minderbemittelten IE's). Hier ein einfaches Beispiel:

papa:

HTML:
<html>
<head>
</head>
<body>
<iframe src="test2.html" id="UserIFrame" name="UserIFrame">
</body>
</html>

kind:

HTML:
<html>
<head>
<script type="text/javascript" src="styles/genevadesign_jquery-1.4.1.js"></script>
<script type="text/javascript">
       function doit(){
          $('body',top.document).append($('#test'));
      }
</script>
</head>
<body>
<div id="test">test</div>
<input type="button" onclick="doit();"/>
</body>
</html>

Wenn das funktionieren würde, so würde beim click auf den button sofort das div auf dem elternobjekt erscheinen. geht aber nicht!

Bekomme immer die Fehlermeldung "Invalid Argument" ? Weiss da jemand bescheid?

Danke gruss
C.
 
Ich hab grad keinen IE zur Hand, aber
1.Hätte ich es so gemacht
Javascript:
$(window.parent.document).find("body").append($('#test'));

2.Ändert vielleicht ein valides Dokument, vorallem die Angabe eines Doctype, das Verhalten.

Edit:
1.Könnte man bei dir auch einfach top.document durch window.parent.document ersetzen.
 
Zuletzt bearbeitet:
Danke für die Antwort.

Leider aber bringt IE den selben Fehler nach wie vor. Die Kombination von window.parent.document in meinem Script habe ich bereits probiert.. führt auch nur zum seleben Fehler.

Mhh.. Ich hab schon mal ein BUG report bei jquery aufgemacht. Denke das sollte doch funktionieren...

PS. Habe den doctype drin... einfach vergessen mitzukopieren:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 
Zuletzt bearbeitet:
Hallo

Hey Dank für deine Antwort! Nun, ich sehe ein gewisses Risiko in dieser Gegebenheit, kann jedoch die Art dieses zu unterbinden - im Gegensatz zu Dir - nicht würdigen. IE ist und bleibt eine totale Fehlgeburt.

Zum einen ist die Fehlermeldung ("invalid Argument") total irreführend. Und zum andern wissen wir ja dass Geckobrowser (und sicherlich auch andere) dieses Verhalten zulassen. Und diese Browsergattung sind keine "Fahrlässige" Systeme.
 
Es ist aber eben korrekt, dass der IE dies verweigert(die Fehlermeldung natürlich nicht :-))

appendChild
Adds the node newChild to the end of the list of children of this node. If the newChild is already in the tree, it is first removed.
[...]
Exceptions
WRONG_DOCUMENT_ERR: Raised if newChild was created from a different document than the one that created this node.

..hier nachzulesen: http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-184E7107
 
Hi,

vielleicht hilft ein Workaround:
Code:
function doit(){
  var objHere = $('<div/>').append($('#test').clone(true));
  var objThere = $('<'+$('#test')[0].nodeName+'/>', top.document);
  $('body', top.document).append(objThere.html($(objHere).html()))
}
Der Knoten wird geklont und in ein Hilfselement eingehängt. Im übergeordneten Dokument wird ein entsprechendes Element erzeugt, eingehängt und mit dem "innerHTML" des Ausgangselements gefüllt.

Ciao
Quaese
 

Neue Beiträge

Zurück