Veröffentlicht 28. Mai 200421 j hi und hallo. ich habe eine datei mit einem <iframe> dieses hat anfangs keinen inhalt und ist nicht sichtbar. dann habe ich noch ein <p> element das also container für den (späteren)inhalt des <iframe> dient beim klick auf einen link soll die src des <iframe> aktualisiert werden und der inhalt in das <p> geschrieben werden. leider geht das nicht so wie ich will, denn man muss immer zweimal auf den link klicken. offensichtlich lädt er beim ersten mal die neue src ins <iframe> und erst beim zweiten mal wird der content des <iframe> in das <p> geschrieben.... hat jemand ne ahnung wie man das machen kann, dass schon beim ersten klick der inhalt ins <p> geschrieben wird??? hier der quellcode <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> </head> <body> <iframe name="srcFrame" src="" style="display:none"></iframe> <br><br><br><a href="#" onClick="document.srcFrame.document.location.replace('someData.html');dynFrame.innerHTML = document.srcFrame.document.body.innerHTML;">doit</a> <p id="dynFrame" style="position:absolute;top:100px;left:0px;"></p> </body> </html>
28. Mai 200421 j einfacher: <script type="text/javascript"> function getStyle(name) { // für IE return document.getElementById(name).style; // für gecko return document.getElementById; } function updateFrame(url) { parent.dynFrame.location = url; getStyle("dynLayer").display = "block"; } </script> <div style="display:none"> <iframe src="leer.htm" name="dynFrame"></iframe> </div> <a href="javascript:updateFrame('neueSeite.htm');" >hier klicken</a>[/PHP]
28. Mai 200421 j hmmm nicht ganz. ich möchte nicht das <iframe> anzeigen sondern dieses <p> das du rausgeworfen hast. und da das absolute positioniert ist kann es dann auch im dokument an verschiedenen stellen angezeigt werden. dass ich den src des <iframe> ändern kann wusste ich...
28. Mai 200421 j Dann postioner doch einfach die Ebene absolut. Setzte einfach noch Höhe und Breite und dann ist gut. Mein Tip: style="overflow:auto;"!
1. Juni 200421 j bitte lies nochmal die frage durch wenn du lust hast. es geht weder darum ein <iframe> einzublenden, noch darum das <p> zu positionieren. das klappt alles schon. es geht vielmehr darum im (versteckten) <iframe> dynamischen content beim klick auf einen link zu laden, da ich die SRC des <iframes> ja ändern kann. das <p> bekommt dann den inhalt des <iframe> z.b. <p> leer <iframe src> leer klick auf den link -> <iframe src> ändert sich zu egal.html -> <p> innerhtml wird auf den <iframe> inhalt, also den quelltext von egal.html, geändert. so und das passiert für jeden link im dokument. nur leider muss ich immer ZWEIMAL auf den link klicken damit sich was tut, also <iframe> src geändert UND <p> innerhtml geändert... hoffe jetzt ist verständlich
1. Juni 200421 j hab mal die html seiten hochgeladen. unter http://gbal.de/dyntest/ ist das ganze zu sehen. vielleicht weiss jemand was. mittlerweilen dauert es schon 3 klicks am anfang bevor der inhalt in dem <p> angezeigt wird...
1. Juni 200421 j Ich denke, dass es an der verzögerung liegt, bis dein iframe den content geladen hat! Versuchs ma so: Ist ungetestet! function getElement( ElementId) { if ( document.all) return document.all[ElementId]; if ( document.layers) return document.layers[ElementId]; if ( document.images) return document.images[ElementId]; if ( document.getElementById) return document.getElementById( ElementId); } function reloadContent( DestinationDivId, SourceIFrameId, url) { var oIframe = getElement(iFrameId); var oDiv = getElement(DestinationDivId); oIframe.document.location.replace(url); var sFrameContent = ""; do { sFrameContent = oIframe.document.body.innerHTML; } while ( sFrameContent == null || sFrameContent == ""); oDiv.innerHTML = sFrameContent; } [/PHP] [PHP] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> </head> <body> <iframe name="srcFrame" src="" style="display:none"></iframe> <br><br><br><a href="#" onClick="reloadContent( 'dynFrame', 'srcFrame', 'someData.html');">doit</a> <p id="dynFrame" style="position:absolute;top:100px;left:0px;"></p> </body> </html> Beachte: Das mit dem innerHTML geht meines wissens nur bei IE!
2. Juni 200421 j hat mein Ansatz so funkioniert? poste ma bitte den code von dir, falls du noch anpassungen vorgenommen hast! Alternativ dazu ist mir noch eingefallen: Anstatt eines iframes kannst du auch ein normales frameset nehmen. machst einfach 2 frame, den einen 100% den anderen 0px. dann in dem 0px frame den content reinladen und per JavaScript in den anderen holen. ich glaube wenn du anstatt von "innerHTML" "innerText" nehmen würdest, wäre das ganze browserunabhängig!
2. Juni 200421 j mist! mag nicht. an der stelle (also am ende der replace funktion oDiv.innerHTML = sFrameContent; steigt er aus. komischerweise ist sFrameContent nicht der content des <iframe> sondern des aktuellen dokuments (in meinem fall index.html) ...gaanz komisch alles
2. Juni 200421 j achso! sorry. hätte dir die fehlermeldung schon gegeben wenn sie nicht "unbekannter laufzeitfehler" wäre lol
2. Juni 200421 j Ist getestet und geht im IE !! anpassungen für NS musste halt noch reinmachen! frame.htm: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <html> <head> <title>Text des universellen Titels</title> </head> <frameset cols="0,*"> <frame src="" id="Dummy"> <frame src="test.htm" name="Main"> <noframes> Ihr Browser kann diese Seite leider nicht anzeigen! </noframes> </frameset> </html> test.htm: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> <script language="javascript"> var vbDOMtype = ''; if (document.getElementById) { vbDOMtype = "std"; } else if (document.all) { vbDOMtype = "ie4"; } else if (document.layers) { vbDOMtype = "ns4"; } var vBobjects = new Array(); function fetch_object(idname, forcefetch) { if (forcefetch || typeof(vBobjects[idname]) == "undefined") { switch (vbDOMtype) { case "std": { vBobjects[idname] = document.getElementById(idname); } break; case "ie4": { vBobjects[idname] = document.all[idname]; } break; case "ns4": { vBobjects[idname] = document.layers[idname]; } break; } } return vBobjects[idname]; } function reloadContent( oDestinationDiv, oSourceIFrame, url) { oSourceIFrame.location.replace(url); var sFrameContent = ""; do { sFrameContent = oSourceIFrame.document.body.innerText; } while ( sFrameContent == ""); oDestinationDiv.innerText = sFrameContent; } </script> </head> <body> <br><br><br><a href="javascript: reloadContent( fetch_object('dynFrame'), self.parent.Dummy, './someData.html');">doit</a> <p id="dynFrame" style="position:absolute;top:100px;left:0px;"></p> </body> </html>
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.