Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

iframe inhalt nach div

Empfohlene Antworten

Veröffentlicht

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>


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]

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...

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

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...

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!

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!

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

was meinste mit, dass er aussteigt?

fehlermeldung?

achso! sorry. hätte dir die fehlermeldung schon gegeben wenn sie nicht "unbekannter laufzeitfehler" wäre lol

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> 

goooooooil das gefällt! super , danke.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.