Ladereihenfolge bei window.open
Pete
- javascript
Hallo,
ich möchte eine "alert-Fenster" selber schreiben, d.h. ein kleines Fenster öffnen und per js-Skript etwas hineinschreiben. Der Code sieht wie folgt aus:
-------------------------------------------------
var fensterbreite=300;
var fensterhoehe=400;
var xposition=100; //bildschirmbreite-fensterbreite-400
var yposition=100; //screen.availTop+20
newWin=window.open('solutionwindow.html','Antwort','toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,copyhistory=no,width='+fensterbreite+',height='+fensterhoehe+',screenX='+xposition+',screenY='+yposition+'');
if (newWin == null) return;
ndoc = newWin.document;
newContent = strText;
if(document.getElementsByTagName) {
ndoc.getElementsByTagName("body")[0].innerHTML = newContent;
} else if(document.all) {
ndoc.all.tags("body")[0].innerHTML = newContent;
} else {
ndoc.clear();
ndoc.open();
ndoc.write(newContent);
ndoc.close();
}
newWin.focus();
-------------------------------------------------
In der Datei solutionwindow.html, die in das Fenster zunächst geladen wird, steht folgendes:
-------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Lösung</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link type="text/css" href="./css/configstyle.css" rel="stylesheet">
<script type="text/javascript" src="./js/helpers.js"></script>
</head>
<body class="head">
MeinPlatz
</body>
</html>
-------------------------------------------------
Nur leider geht es nicht. Mit Hilfe von alerts habe ich rausgefunden, dass newContent schon korrekt in das Dokument geschrieben wird, aber dann vom Browser durch das Wort MeinPlatz in solutionWindow.html überschrieben wird. ? Wird nicht erst das dokument vollständig geladen und dann überschrieben?
Hätte jemand eine Lösung für mich oder einen Tipp an welcher Stelle was schief läuft?
Pete
Hallo,
ich möchte eine "alert-Fenster" selber schreiben, d.h. ein kleines Fenster öffnen und per js-Skript etwas hineinschreiben. Der Code sieht wie folgt aus:
var fensterbreite=300;
var fensterhoehe=400;var xposition=100; //bildschirmbreite-fensterbreite-400
var yposition=100; //screen.availTop+20newWin=window.open('solutionwindow.html','Antwort','toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,copyhistory=no,width='+fensterbreite+',height='+fensterhoehe+',screenX='+xposition+',screenY='+yposition+'');
if (newWin == null) return;
ndoc = newWin.document;newContent = strText;
function mk_text()
{
if(document.getElementsByTagName) {
ndoc.getElementsByTagName("body")[0].innerHTML = newContent;
} else if(document.all) {
ndoc.all.tags("body")[0].innerHTML = newContent;
} else {
ndoc.clear();
ndoc.open();
ndoc.write(newContent);
ndoc.close();
}newWin.focus();
}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Lösung</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link type="text/css" href="./css/configstyle.css" rel="stylesheet">
<script type="text/javascript" src="./js/helpers.js"></script>
</head>
<body class="head" onLoad="opener.mk_text()">
MeinPlatz
</body>
</html>
Gruß aus Berlin!
eddi
Hallo,
<body class="head" onLoad="opener.mk_text()">
das ginge natürlich auch, aber leider kann ich es so nicht realisieren, da das meiner Datenstruktur widerspricht. Das Fenster ist nur als Empfänger gedacht und hat keine Ahnung, was es darstellen soll. Nur der Button, der das Fenster öffnet kennt den Inhalt.
Ungefähr so:
<a href="JavaScript:showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
Der Text wird dann interpretiert und formatiert und soll in das neu geöffnete Fenster reingeschrieben werden.
Gibt es nicht irgendwie eine einfache Möglichkeit den Ladestatus des Fensters oder so zu Hilfe zu nehmen? Ist das Fenster denn dann schon vollständig geladen?
Pete
Hi,
<a href="JavaScript:showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
"Parke" die Daten irgendwo wo Du Zugriff hast (z.B. Hidden-INPUT mit dem Namen "text" in einem Formular "temp").
Und in der zu öffnenden Seite:
document.getElementsByTagName("body")[0].innerHTML=window.opener.document.temp.text.value;
Gruß, Cybaer
Okay, das mit dem opener hatte ich vergessen. Dennoch hätte ich noch gerne für meinen merkwürdigen Effekt eine Erklärung. Was läuft da im Hintergrund ab?
Pete
Hallo,
Okay, das mit dem opener hatte ich vergessen. Dennoch hätte ich noch gerne für meinen merkwürdigen Effekt eine Erklärung. Was läuft da im Hintergrund ab?
Das ist kein merkwürdiger Effekt, sondern das ganz normale Verhalten von HTTP ;-)).
newWin=window.open('solutionwindow.html','Antwort','toolbar=no,location=no,directories=no,status=no,scrollbars=yes,resizable=yes,copyhistory=no,width='+fensterbreite+',height='+fensterhoehe+',screenX='+xposition+',screenY='+yposition+'');
öffnet ein neues Fenster und übergibt ein Window-Objekt, welches dieses neue Fenster representiert, in der Variablen newWin.
ndoc = newWin.document;
übergibt in die Variable ndoc das document-Objekt des neuen Fensters. Das ist zu diesem Zeitpunkt ein leeres Dokument. Dort hinein schreibt Dein javaScript-Code nun den newContent.
Wann und ob vom neuen Fenster aus via HTTP GET die Ressource /solutionwindow.html vom Host angefordert wird, weiß Dein JavaScript nicht. Die Anforderung passiert aber, weil Du es im window.open ja so gefordert hast.
Wenn der Response für die Anforderung eingetroffen ist, wird der Dokumentinhalt mit dem Inhalt des Response überschrieben.
Die angebotenen Lösungen sorgen dafür, dass _erst_ der Response abgewartet wird und erst _dann_ (onload), vom neuen Fenster aus, das Schreiben von newContent angestoßen wird.
viele Grüße
Axel
Hallo Pete,
<body class="head" onLoad="opener.mk_text()">
das ginge natürlich auch, aber leider kann ich es so nicht realisieren, da das meiner Datenstruktur widerspricht. Das Fenster ist nur als Empfänger gedacht und hat keine Ahnung, was es darstellen soll. Nur der Button, der das Fenster öffnet kennt den Inhalt.
wo ist Dein Problem? Var newContent ist aus Sicht des geöffneten window in opener.newContent gespeichert, was aber völlig egal ist, da mein Beispiel eine Funktion im opener aufruft, die auf var newContent zugreifen kann.
<a href="JavaScript:showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
<a href="#" onClick="showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
Funktionen in JavaScript haben anders als bspw. PHP kaum Einschränkungen und können auf Variablen, die außerhalb einer Funktion definiert wurden, zugreifen.
Gruß aus Berlin!
eddi
Hallo,
<a href="JavaScript:showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
<a href="#" onClick="showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
Aha, welchen Vorteil hat das?
Mathias
Hallo,
<a href="#" onClick="showSolution('<b>das hier ist mein Text</b>')">zeigen</a>
Aha, welchen Vorteil hat das?
So wie es da jetzt steht? Kaum einen! Aber bspw. eine Lösung, wie </archiv/2003/1/35658/#m194769>, hätte somit platz im href-Attriebut ;)
Gruß aus Berlin!
eddi