"Falscher Inhalt" im Popup-Fenster
Sören Kuklau
- javascript
Hallo,
ich hab mit JavaScript eine Funktion erstellt, die per window.open ein neues Fenster öffnet, und dann per document.write dessen Inhalt verändert. So weit, so gut.
Wenn ich die Funktion aufrufe, funktioniert es. Rufe ich sie aber, *ohne* das Popup vorher zu schließen, nochmal auf (mit anderen Parametern), so scheint die Ausführung des Skriptes beim window.open aufzuhören. Kann es sein, dass das eine Sicherheits-Sperre ist? Damit keine fremde Seite auf bestehende Fenster zugreifen kann oder so was?
Als Workaround dachte ich mir aus, das Fenster, wenn vorhanden, zu schließen, nur funktioniert das nicht (sinngemäß):
function[..]
{ if(! Fenster) { Fenster.close(); }
[..]
}
Wenn ich die Funktion aufrufe, funktioniert es. Rufe ich sie aber, *ohne* das Popup vorher zu schließen, nochmal auf (mit anderen Parametern), so scheint die Ausführung des Skriptes beim window.open aufzuhören.
Dies sollte eigentlich trotzdem funktionieren, uploade dochmal den ganzen source-code
gruß urmel
Wenn ich die Funktion aufrufe, funktioniert es. Rufe ich sie aber, *ohne* das Popup vorher zu schließen, nochmal auf (mit anderen Parametern), so scheint die Ausführung des Skriptes beim window.open aufzuhören.
Dies sollte eigentlich trotzdem funktionieren, uploade dochmal den ganzen source-code
gruß urmel
Nun denn:
function mediapopup(file,width,height,type) {
newwidth = width + 36;
if (type == "qt") { newheight = height + 48; mediaheight = height + 16; }
else { newheight = height + 36; }
var MediaWin = open("/assets/media.html","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
MediaWin.document.write('<html><head><title>MYSTerium.ch Media Viewer: ' + file + '</title></head><body><center>');
if (type == "qt") { MediaWin.document.write('<embed src="' + file + '" type="video/quicktime" width="' + width + '" height="' + mediaheight + '" autoplay="true" controller="true" cache="true" title="Please note that the above content is likely copyrighted material and not free for use.">'); }
else { MediaWin.document.write('<img src="' + file + '" width="' + width + '" height="' + height + '" border="0" title="Please note that the above content is likely copyrighted material and not free for use."/>'); }
MediaWin.document.write('</body></html>');
MediaWin.status = 'Please note that the above content is likely copyrighted material and not free for use.';
}
Das ist die Funktion. Aufgerufen wird sie z.B. mit
javascript:mediapopup('http://internal.mystfans.com/assets/myst/screenshots/mystisland_01.jpg',544,333)
oder mit
javascript:mediapopup('http://www.mysterium.ch/assets/myst/movies/tvspot.mov',160,120,'qt')
. Im letzten Fall wird noch zusätzlich definiert, dass es sich um ein QuickTime-Movie handelt. Ich hoffe, du blickst da durch ;)
gruss Sören
function mediapopup(file,width,height,type) {
newwidth = width + 36;
if (type == "qt") { newheight = height + 48; mediaheight = height + 16; }
else { newheight = height + 36; }
var MediaWin = open
-----------^^^
hier koennte schon der fehler liegen;
definiere "MediaWin" einfach als globale variable,
damit es das fenster auch wirklich nur einmal gibt,
egal wie oft Du die funktion "mediapopup(...)" aufrufst;
("/assets/media.html","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
MediaWin.document.write('<html> ... </html>');
...
MediaWin.status = 'Please note that the above content is likely copyrighted material and not free for use.';
}
javascript:mediapopup('http://internal.mystfans.com/assets/myst/screenshots/mystisland_01.jpg',544,333)
by(t)e by(t)e - peterS. - pseliger@gmx.net
.. und uebrigens muss in der funktion "mediapopup(...)"
zur methode "open(..)" auch einentsprechendes objekt stehen
also nicht:
function mediapopup(file,width,height,type) {
newwidth = width + 36;
if (type == "qt") { newheight = height + 48; mediaheight = height + 16; }
else { newheight = height + 36; }
var MediaWin = open
-------------------------^^^^
("/assets/media.html","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
...
}
sondern:
var MediaWin = null;
function mediapopup(file,width,height,type) {
newwidth = width + 36;
if (type == "qt") { newheight = height + 48; mediaheight = height + 16; }
else { newheight = height + 36; }
MediaWin = window.open("/assets/media.html","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
...
}
schones WE - tschuess - peterS. - pseliger@gmx.net
Hallo,
auch dir ein schönes Wochenende. Leider bin ich nicht viel weiter, auch wenn deine Idee mit der globalen Variable sinnig erschien. Der Code ist nun:
var MediaWin = null;
var MediaWinDoc = MediaWin.document;
[.. andere Funktionen ..]
function mediapopup(file,width,height,type) {
newwidth = width + 36;
if (type == "qt") { newheight = height + 48; mediaheight = height + 16; }
else { newheight = height + 36; }
MediaWin = window.open("/assets/media.html","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
MediaWinDoc.write('<html><head><title>MYSTerium.ch Media Viewer: ' + file + '</title></head><body><center>');
if (type == "qt") { MediaWinDoc.write('<embed src="' + file + '" type="video/quicktime" width="' + width + '" height="' + mediaheight + '" autoplay="true" controller="true" cache="true" title="Please note that the above content is likely copyrighted material and not free for use.">'); }
else { MediaWin.document.write('<img src="' + file + '" width="' + width + '" height="' + height + '" border="0" title="Please note that the above content is likely copyrighted material and not free for use."/>'); }
MediaWinDoc.write('</body></html>');
MediaWin.status = 'Please note that the above content is likely copyrighted material and not free for use.';
}
----------
Also. Auf Opera ging es sowieso nicht, da der wohl document.write() nicht kann. Mozilla (aktuelle NightlyBuild) öffnet nun zwei Fenster: eins in der richtigen Größe und ein normal großes. Bevor er irgendwas aufbaut, stürzt er ab. Bei IE ist weiterhin das Problem, dass er es erst richtig macht und ab dem zweiten Mal document.write() ignoriert und einfach nur die Dummy-Datei media.html anzeigt.
Vielleicht fällt dir ja noch was ein - oder jemand Anderem. Danke jedenfalls erstmal.
hallo again Sören,
var MediaWin = null;
var MediaWinDoc = MediaWin.document;
mmh ich weiss nicht:
Du benoetigst die zweite variable nicht zwingend;
und ich bezweifle, dass deren definition sich auf
"MediaWin = null;" beziehen kann - da ist einfach noch nichts;
so wie es aussieht, kannst Du ausserdem auf die
dummydatei "/assets/media.html" verzichten oder nicht?
die funktion "mediapopup(file,width,height,type)"
kann zwar das argument "file" entgegennehmen, aber
Du benutzt dieses offensichtlich nicht?;
schreib doch zum oeffnen Deines fensters folgenden code:
...;
MediaWin = window.open("","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
MediaWin.document.open("text/html");
MediaWin.document.write('<html> ... DEIN CODE ... </html>');
MediaWinDoc.close();
...;
nachdem Du Dich von der globalen "MediaWinDoc" getrennt hast
und nur noch mit der globalen "MediaWin" arbeitest -
das muss funktionieren, sonst fang ich an zu zweifeln;
by(t)e by(t)e - peterS. - pseliger@gmx.net
...
gruss Sören,
nachtrag die zweite:
MediaWin.document.open("text/html");
MediaWin.document.write('<html> ... DEIN CODE ... </html>');
MediaWinDoc.close();
--------------^^^
natuerlich "MediaWin.close();"
... ist nicht mein tag heute ... *zieht sich zurueck* - tschuess
peterS. - pseliger@gmx.net
(sch...) - rotfla
...
gruss Sören,
nachtrag die dritte:
MediaWin.document.open("text/html");
MediaWin.document.write('<html> ... DEIN CODE ... </html>');
MediaWinDoc.close();
--------------^^^
natuerlich "MediaWin.document.close();"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
... ist nicht mein tag heute ... *zieht sich !!endgueltig!! zurueck* und zwar beschaemt - tschuess
peterS. - pseliger@gmx.net
[ Die Nachtrage habe ich wahrgenommen :D ]
hallo again Sören,
var MediaWin = null;
var MediaWinDoc = MediaWin.document;
mmh ich weiss nicht:
Du benoetigst die zweite variable nicht zwingend;
und ich bezweifle, dass deren definition sich auf
"MediaWin = null;" beziehen kann - da ist einfach noch nichts;
In Ordnung, irgendwo sah ich ein vergleichbares Beispiel (ähm... war das nicht in SelfHTML? *G*) und dachte, das würde vielleicht Platz sparen. Aber du hast Recht, ein Bezug auf null ist wohl nicht sooo passend.
so wie es aussieht, kannst Du ausserdem auf die
dummydatei "/assets/media.html" verzichten oder nicht?
Von der Theorie her ja, aber in der Praxis zeigte sich, dass einige Browser das nicht mögen (hab's nicht genauer in Erinnerung).
die funktion "mediapopup(file,width,height,type)"
kann zwar das argument "file" entgegennehmen, aber
Du benutzt dieses offensichtlich nicht?;
Aber sicher doch, wie soll ich sonst die darzustellende Datei angeben?
schreib doch zum oeffnen Deines fensters folgenden code:
...;
MediaWin = window.open("","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
MediaWin.document.open("text/html");
MediaWin.document.write('<html> ... DEIN CODE ... </html>');
MediaWinDoc.close();
...;
nachdem Du Dich von der globalen "MediaWinDoc" getrennt hast
und nur noch mit der globalen "MediaWin" arbeitest -
das muss funktionieren, sonst fang ich an zu zweifeln;
Okay... das hab ich jetzt gemacht, mit korrigierten close... dummerweise läuft mein Mozilla jetzt garnicht mehr *grummel* so dass ich nur unter IE testen kann (Opera verweigert es immernoch). Dieselbe Situation wie am Anfang.
-----
var MediaWin = null;
[ andere Funktionen ]
function mediapopup(file,width,height,type) {
newwidth = width + 36;
if (type == "qt") { newheight = height + 48; mediaheight = height + 16; }
else { newheight = height + 36; }
var MediaWin = open("/assets/media.html","MediaViewer","width=" + newwidth + ",height=" + newheight + ",screenX=100,screenY=100,resizable=yes,scrollbars=yes,menubar=no,status=yes");
MediaWin.document.open("text/html");
MediaWin.document.write('<html><head><title>MYSTerium.ch Media Viewer: ' + file + '</title></head><body><center>');
if (type == "qt") { MediaWin.document.write('<embed src="' + file + '" type="video/quicktime" width="' + width + '" height="' + mediaheight + '" autoplay="true" controller="true" cache="true" title="Please note that the above content is likely copyrighted material and not free for use.">'); }
else { MediaWinDoc.write('<img src="' + file + '" width="' + width + '" height="' + height + '" border="0" title="Please note that the above content is likely copyrighted material and not free for use."/>'); }
MediaWin.document.write('</body></html>');
MediaWin.document.close();
MediaWin.status = 'Please note that the above content is likely copyrighted material and not free for use.';
}
-----
Wenn du dich von deinem schlechten Tag ausgeruht hast, könntest du mir nochmal zur Seite stehen, bittebitte? :)
Achja... ähm... gibt es nicht vielleicht so 'ne Art JS-Validator?