molily: Neues Fenster - Eigenschaften zuweisen

Beitrag lesen

Hallo,

Das Problem warum ich nicht mit <body onload="test()"> im neu geöffneten Fenster weiterarbeiten kann, liegt diesmal bei einem "Sicherheitsfeature" des IE. Auf meiner Hauptseite kann der User in einem Formular eine Bilddatei in einem seiner Laufwerke auswählen ( <input type="file" ....>). Dieses Bild soll dann auf der neu aufgebauten Seite angezeigt werden (läuft ohne upload nur auf dem Rechner des Users). Wenn ich dies von der Hauptseite aus zuweise (ziel.getElementById("bild_q").src ="///"+ quelle.F.bild_datei.value;) dann geht das ohne Probleme (bei Mozilla, Opera mit obigem Problem). Wenn sich die neue Seite jedoch diesen Dateinamen ausliest und dann versucht die Datei anzuzeigen, dann meldet der IE "Zugriff wurde verweigert". Übrigens alle anderen getesteten Browser machen hier kein Problem (oder sehen es lockerer).

Ich sehe das Problem dabei nicht, aber vielleicht missverstehe ich dich auch. Wenn beide die HTML-Dokumente auf demselben Rechner liegen bzw. über das lokale Netzwerk geöffnet werden, funktioniert es bei mir.

a.html:

<html>
<head>
<title>a</title>
<script type="text/javascript">
function oeffnefenster () {
 fenster=window.open('b.html', 'fenster', 'location=yes,status=yes,resizable=yes');
 return false;
}
function init () {
 document.forms['formular'].onsubmit=oeffnefenster;
}
window.onload=init;
</script>
</head>
<body>
<form action="a.html" name="formular">
<p><input type="file" name="feld"></p>
<p><input type="submit" name="submit" value="zeige"></p>
</form>
</body>
</html>

b.html:

<html>
<head>
<title>b</title>
<script type="text/javascript">
window.onload=function () {
 document.images['bild'].src='///'+opener.document.forms['formular'].elements['feld'].value;
}
</script>
</head>
<body>
<p><img src="blind.png" id="bild" alt="" /></p>
</body>
</html>

Sobald zusätzliche Rechtezonen ins Spiel kommen, gibt es freilich kleine bzw. große Schwierigkeiten (angefangen bei den Adressschemata), aber solange Bilder aus derselben Zone geöffnet werden, in der die HTML-Dokumente liegen,  und kein Cross-Domain-Scripting stattfindet, funktioniert es in meinen Tests im MSIE 6 (vollgepatcht, Windows 98), Opera 7.5 und Firefox 0.9.

Außerdem ließe sich das Ausgangsproblem auch direkter lösen, falls der Code in b.html bei dir die besagte Sicherheitswarnung auslöst. Soweit ich dich verstanden habe, funktioniert deinen Tests zufolge das Ändern des Bildes im MSIE von a aus, nicht von b wie in meinem obigen Beispiel. Dafür lässt sich sofort nach window.open() auf das Fenster zugreifen. Damit ließe sich eine entsprechende Abfrage einbauen, nach der das Bild entweder vom Ausgangsfenster oder vom neuen Fenster aus geändert wird:

function oeffnefenster () {
 fenster=window.open('b.html', 'fenster', 'location=yes,status=yes,resizable=yes');
 if (fenster.document.images['bild']) { // falls direkt auf das Bild zugegriffen werden kann
  fenster.loadimage=false;
  fenster.document.title='neuer fenstertitel';
  fenster.document.images['bild'].src='///'+document.forms['formular'].elements['feld'].value;
 } else {
  fenster.loadimage=true; // falls nicht, dann setze eine Variable
 }
 return false;
}

In b.html:
window.onload=function () {
 if (typeof(loadimage)!='undefined' && loadimage) { // führe nur dann aus, wenn das Bild nicht schon von a.html aus geändert wurde
  document.title='neuer fenstertitel';
  document.images['bild'].src='///'+opener.document.forms['formular'].elements['feld'].value;
 }
}

Vielleicht ließen sich damit die verschiedenen Browser zufriedenstellen. MSIE führt in meinen Tests die Bildänderung von a.html aus, Opera und Firefox von b.html aus.

Mathias