• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Javascript im IFrame

ben

Mitglied
hallo zusammen,

also ich habe zwei seiten auf der einen ist ein iframe der die andere seite enthalt.
Nun will ich von der seite mit dem iframe mit javascript die hintergrund farbe von der anderen seite andern.

ich habe schon folgendes probiert:

1. ich habe einen link mit href="javascript:document.body.style.backgroundColor='#ff0000';" und dann mit target das versucht in dem iframe zu benutzen aber das ging nicht

2. und dann hab ich noch ein script fur einen button/link auf der iframe seite
Code:
document.getElementById('targetFrame').contentWindow.changecolor();
mit das im header script von der iframe seite
Code:
function changecolor() {
document.body.style.backgroundColor='#ff0000';
}
Und ja ich kenn die iframe diskussion aber das hat einen grund das ich ihn benutze.

Kann mir jemand sagen wie ich den javascript auf der seite im iframe benutzen kann ohne den auf diese seite zu schreiben?

vielen dank im voraus
Ben
 
index.html
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
<script type="text/javascript">
var makeTheFrameLookBetter = function() {
    document.getElementById("btw_iframes_sind_boese").contentWindow.makeItNicer();
};
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", makeTheFrameLookBetter, false);
} else {
    window.attachEvent("onload", makeTheFrameLookBetter);
}
</script>
</head>
<body>
<iframe id="btw_iframes_sind_boese" src="frame.html"></iframe>
</body>
</html>
frame.html
HTML:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
<script type="text/javascript">
var makeItNicer = function() {
    document.body.style.backgroundColor = "red";
};
</script>
</head>
<body>
Hi
</body>
</html>

Funktioniert bei mir so einwandfrei. War das iframe bei der Ausführung schon im DOM bereit?
 
die error console zeigt gar nichts fur den link mit target

und fur den button mit dem javascript code das hier

Code:
Error: document.getElementById("targetFrame").contentWindow.changecolor is not a function
Line: 1

also hier sind meine dateien (mit dem javascript + button nicht der mit target im link)

index.html
Code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
</head>

<script language="JavaScript">
function changecolor() {
document.body.style.backgroundColor='#ff0000';
}

</script>



<iframe src="frame.html" width="90%" height="90%" id="targetFrame"></iframe>

<br />

<input type="button" value="click" onclick="document.getElementById('targetFrame').changecolor();" />

</html>

frame.html
Code:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Zielseite</title>

</head>
<body>


<h1>Test</h1>
<p>test</p>


</body>
</html>

da ich mehrere seiten benutzen will in dem frame (also nacheinander) will ich den script auf der seite von index.html haben nicht in frame.html.
frame.html soll so bleiben wie es ist.
Man kann doch auch "javascript:somecode" in die URL bar tippen dann musste das doch so auch irgedwie moeglich sein oder?

Ich versuche bei meinen seiten mit javascript den style zu verandern und das dann den benutzer zu zeigen. also irgendeine andere losung wurde auch gehen ohne iframe aber ich mochte den code der frame.html seite nicht andern. Wie geht so was?
 
Dann gehe doch mal schrittweise vor. Die Fehlerkonsole sagt dir ja, dass die Funktion nicht dort existiert wo du sie vermutest. Also musst du schauen, ob das Objekt document.getElementById('targetFrame') auch das iframe Objekt ist. Einfach mit alert ausgeben lassen.

Vermutlich versuchst du einfach viel zu früh auf den Inhalt zu zugreifen und musst erst abwarten, bis das iframe geladen wurde.

Übrigens, in HTML5 musst du shorttags nicht schliessen.
 
das Iframe element ist das richtige hab ich vorher schon probiert

nein ich habe den iframe vollstandig laden lassen

der error wird angezeigt weil der die javascript function in der datei frame.html sucht die aber in der index.html ist. wenn ich die aber normal in der index.html aufrufe andert der den hintergrund von der ganzen seite und nicht nur dem rahmen.

Ich moechte die function in index.html haben und im frame.html ausfuhren. Das muss doch irgendwie moeglich sein weil der code von dem frame ja auch im browser geladen wurde und javascript den style im browser andert, oder?

danke fur euren creativen beitrage und hilfen
 
weis denn keiner wie man eine JavaScript function im IFrame ausfuhrt aber sie im index.html gecoded hat?

ich weis nur wie man die im IFrame ausfuhrt wenn sie auch im IFrame gecoded ist
 
Du führst sie doch gar nicht im iframe aus, sondern in der index.html

Kann es sein, dass es dir gar nicht um das ausführen geht, sondern das du einfach eine Eigenschaft im iframe ändern willst? Dann musst du vor document noch das iframe window Objekt hängen.
 
Kann es sein, dass es dir gar nicht um das ausführen geht, sondern das du einfach eine Eigenschaft im iframe ändern willst?
mir geht es eigendlich ums ausfuhren aber ich habe erstmal nur versucht eine eigenschaft zu andern weil das einfacher ist.

ich habe es hingekriegt die hintergrundfarbe zu andern mit diesem code:
Code:
var inhalt = document.getElementById("targetFrame").contentWindow;
inhalt.document.bgColor = "#ff0000";
Test here I put it online

das functioniert problemlos aber sobald die dateien nicht auf dem gleichen server sind sagt der mir
Code:
Error: Permission denied for <(Current server root)> to get property Window.document

(current server root) ist z.b. file:// oder www.google.de/
man kann doch auch in die URL bar auf irdendeiner seite tippen
javascript:void(document.bgColor="#ff0000")
und das andert die Farbe. Dann muesste das doch auch im iframe gehen ohne das die Dateien auf dem gleichen server liegen oder? (ich habe mehrere webhosts und moechte das gerne ubergreifend machen)
 
mir geht es eigendlich ums ausfuhren ...
Es wäre wirklich sinnvoll gewesen, wenn du uns von Anfang an gesagt hättest, worum es bei deiner Frage wirklich geht.

Weder das ausführen von Funktionen in einem (i)Frame ist ein Problem (es läßt sich aber an deinem Code auch nicht erkenen, dass du das vor hast), noch das zugreifen auf Eigenschaften.

Da in deinem Beispiel aber nicht erkennbar war, was du letztlich tatsächlich machen willst und auf was du zugreifen oder was du ausführen möchtest, war das eine Ratestunde, die letztlich an der fehlenden Information, dass die Dateien nicht auf dem gleichen Server liegen Zeit verschwendung war. Aber genau in diese Richtung zielte meine erste Nachfrage, denn die Fehlerkonsole zeigt wie du jetzt bemerkt hast, einen Fehler an, wenn du die SOP verletzt.

So hast du jetzt 4 Tage gebraucht, um die notwendige Information zu bekommen.
 
danke mermshaus ... dann muss ich das wohl irdendwie anders machen.


struppi: dann spar dir einfach deine kommentare denn sie helfen mir nicht und du motzt nur an meinen fehlern rum aber helfen kannst du nicht wirklich. Wenn etwas unklar war hattest du von anfang an fragen koennen.
 
struppi: dann spar dir einfach deine kommentare denn sie helfen mir nicht und du motzt nur an meinen fehlern rum aber helfen kannst du nicht wirklich. Wenn etwas unklar war hattest du von anfang an fragen koennen.
Ich habe dir versucht zu erklären, warum wir Tage brauchten um dein Problem zu zu verstehen. Du hast offensichtlich meine Ausführungen nicht kapiert und das Verständnis reicht nur noch zum rumstänkern.

Ich habe nicht an deinen Fehler gemotzt, sondern dir versucht zu erklären, warum die ganze Geschichte gedauert hat. Ich HABE VON ANFANG AN GEFRAGT, aber du hast uns eine falsche Meldung gesagt. Danach habe ich dir lang und breit erklärt, was du tun kannst damit WIR Dir helfen können. Und jetzt behauptest du ich könnte nicht helfen, weil du zu dämlich bist? Reichlich Arrogant von dir. Aber jeder wie er's braucht.
 
Zurück
Oben