 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
10.08.2006, 15:49
|
#1
|
|
TP-Member
Registriert seit: Apr 2005
|
automatisches schließen von pop ups
hallo,
dieses thema mag schon öfters angesprochen worden sein, und auch wenn man googelt, gibts viele treffer. leider hat es alles nicht geholfen, so dass ich das jetzt klipp und klar hier nachfragen muss.
ich habe eine ausgangsseite, von der aus ich über einen bildlink ein pop up öffnen möchte, welches sich wiederum automatisch schließen soll, wenn das pop up fenster den focus verliert. eigentlich ja ganz einfach, funktioniert aber doch alles nicht so, wie ich es erwarten würde.
hier der code (test):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test Index</title>
<script language="JavaScript">
<!--
function open_popup(pageURL,winName,features) {
myPopWin=window.open(pageURL,winName,features);
myPopWin.focus();
//myPopWin.onblur = myPopWin.close();
}
-->
</script>
</head>
<body>
<table width="99%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="600" align="center" valign="middle">
<font face="Verdana, Arial, Helvetica, sans-serif">Test Index</font>
<p> <p>
<a href="#" onclick= "open_popup('test_fs.html','myPopUp','width=500,height=500,screenX=80,screenY=130')">
<img src="TestImg.gif" alt="Pop Up" width="120" height="40" border="0" /></a>
</td>
</tr>
</table>
</body>
</html>
der auskommentierte code ist nur ein versuch, der dann aber zu einem javascript fehler führt. das äußert sich dahingehend, dass das fenster sofort wieder geschlossen wird und folgender fehler in der JS-konsole auftaucht:
Zitat:
|
Fehler: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIControllers.removeController]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: chrome://browser/content/search.xml :: onxbldestructor :: line 77" data: no]
|
den tips einiger webforen zufolge habe ich es auch schon im pop up selbst mit dem folgenden code im head versucht:
Zitat:
<script type="text/javascript">
<!--
window.onblur = window.close;
//-->
</script>
|
das funktioniert leider so gut, dass sich das fenster auch dann schließt, wenn man hineinklickt. womöglich liegt es daran, dass es ein frameset ist.
um es komplett zu machen, hier nochmal der html code des pop up fensters (ohne den javascript code):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test FS</title>
</head>
<frameset rows="*,*"" frameborder="NO" border="0" framespacing="0">
<frame src="Test1.html" name="topFrame" id="topFrame" title="topFrame" />
<frame src="Test2.html" name="mainFrame" id="mainFrame" title="mainFrame" />
</frameset>
<noframes><body>
</body>
</noframes></html>
|
|
|
11.08.2006, 09:52
|
#2
|
|
TP-Moderator
Registriert seit: Jan 2003
Ort: Wien
|
Das dürfte tatsächlich am Frameset liegen. Du kannst das Problem dennoch lösen, indem du statt dem Frameset eine normale Datei mit zwei IFrames nimmst:
PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Test Index</title>
</head>
<body style="margin:0; padding:0;" onblur="window.close()"> <iframe src="dsfasd.htm" width="100%" height="250px"></iframe> <iframe src="sdffasd.htm" width="100%" height="250px"></iframe> </body> </html>
Ist zwar nicht die beste Lösung, aber sie funktioniert.
|
|
|
11.08.2006, 14:04
|
#3
|
|
TP-Member
Registriert seit: Apr 2005
|
besten dank schonmal. ich werde das machen, wenn keine andere lösung mehr greift.
übrigens kam der oben angesprochene javascript fehler wegen der klammern hinter dem close zustande. ohne funktioniert das genauso gut (oder schlecht), wie das script im popup.
PHP-Code:
<script language="JavaScript"> <!-- function open_popup(pageURL,winName,features) { myPopWin=window.open(pageURL,winName,features); if (window.focus) {myPopWin.focus();} myPopWin.onblur = myPopWin.close; return false; } --> </script>
kann mir eigentlich jemand in diesem zusammenhang mal erklären warum
myPopWin.onblur = myPopWin.close; funktioniert und if (myPopWin.onblur) {myPopWin.close;} nicht?
und eigentlich müsste es doch möglich sein, statt myPopWin.onblur
PHP-Code:
window.onfocus = myPopWin.close;
einzusetzen (was nicht funktioniert) bzw. irgendetwas zu schreiben, womit man das fenster, das das pop up geöffnet hat, anzusprechen. d.h. wenn man auf die ausgangsseite zurückkommt, wird das pop up geschlossen, nicht aber, wenn man auf ein ganz anderes browserfenster klickt.
Geändert von lxxl (11.08.2006 um 14:07 Uhr).
|
|
|
11.08.2006, 14:30
|
#4
|
|
TP-Moderator
Registriert seit: Jan 2003
Ort: Wien
|
PHP-Code:
if (myPopWin.onblur) {myPopWin.close;}
Ich bin mir jetzt nicht ganz sicher, aber ich glaube das funktioniert nicht, weil du mit if (myPopWin.onblur) lediglich abfragst, ob das Ereignis "onblur" registriert ist oder nicht. Du fragst damit also nicht ab, ob "onblur" ausgelöst wurde.
|
|
|
11.08.2006, 14:48
|
#5
|
|
TP-Member
Registriert seit: Apr 2005
|
ähm, und wie würde man denn dann eine konditionalabfrage machen?
|
|
|
11.08.2006, 15:58
|
#6
|
|
TP-Moderator
Registriert seit: Jan 2003
Ort: Wien
|
Ohne if denke ich.
PHP-Code:
<body onblur="myPopWin.close;">
|
|
|
11.08.2006, 16:49
|
#7
|
|
TP-Member
Registriert seit: Apr 2005
|
naja, aber wie läuft das innerhalb eines javascriptcodes? theoretisch könnte man ja auch noch weitere befehle ausführen lassen, wenn ein bestimmter zustand zutrifft oder ggf. eine else anweisung folgen lassen.
das hat mit dem eigentlichen problem hier weniger zu tun, vielmehr verstehe ich die grundsätzliche funktionsweise nicht.
im prinzip verstehe ich auch nicht, warum ich nicht einfach das ausgangsfenster in eine variable packen und dann sagen kann: wenn eben dieses ausgangsfenster (variable?) aktiviert wird, dann soll sich das popup (myPopWin) schließen.
kann doch eigentlich nicht so schwer sein.
|
|
|
11.08.2006, 17:22
|
#8
|
|
TP-Moderator
Registriert seit: Jan 2003
Ort: Wien
|
Puuuh, langsam komm ich ins Schwitzen hier.  Bin da auch in der Theorie etwas überfragt...
Wenn du mehrere Befehle ausführen willst, dann machst du am besten eine Funktion, die bei onblur aufgerufen wird. Da kannst du dann ja deine Bedingungen erstellen.
Das Prinzip, das Fenster in eine Variable zu setzen geht sehr wohl, nur habe ich das in der Praxis noch nicht angewendet. Deshalb kann ich dir hier leider auch nicht weiterhelfen! 
|
|
|
11.08.2006, 21:07
|
#9
|
|
TP-Member
Registriert seit: Apr 2005
|
vielleicht können wir uns ja schrittweise einer erleuchtung nähern.
nr.1: wie kann ich das ausgangsfenster in eine variable speichern?
vielleicht myBaseWin = window;? scheint aber nicht zu funktionieren.
eigentlich müsste ja window bereits ausreichen, da der code oben im header script (if (window.focus) {myPopWin.focus();}) ja offenbar ganz prächtig funzt. danach kann man dann aber leider nix mehr mit window anfangen. zumindest weiß ich nicht wie.
Geändert von lxxl (11.08.2006 um 21:09 Uhr).
|
|
|
12.08.2006, 03:54
|
#10
|
|
TP-Member
Registriert seit: Apr 2005
|
tja, wohl unmöglich, was ich da verlange, wa?
leider kann ich auch nicht bestätigen, dass die iframe lösung funktioniert. wie sollte sie auch!? das popup fenster verliert ja nach wie vor den fokus und wird somit geschlossen (spätestens wenn man auf links innerhalb der eingebetteten dokumente klickt, eigentlich reicht aber schon ein klick in eine leere fläche), iframes oder framesets – völlig egal.
ein großes problem scheint auch in der doch recht seltsamen funktionsweise von onfocus zu liegen. keine ahnung, wie man das im zusammenhang mit dem window-objekt sinnvoll verwenden kann.

|
|
|
12.08.2006, 13:50
|
#11
|
|
TP-Member
Registriert seit: Apr 2005
|
habe nun doch noch eine lösung gefunden:
quelle: http://forum.de.selfhtml.org/archiv/2003/1/t36518/#top
demnach sieht mein javascript code im head jetzt folgendermaßen aus:
PHP-Code:
<script language="JavaScript"> <!-- var myPopWin = null; function open_popup(pageURL,winName,features) { myPopWin = window.open(pageURL,winName,features); if (window.focus) {myPopWin.focus();} window.onfocus = function () { if(!myPopWin) {return;} myPopWin.close(); myPopWin = null; window.onfocus = null; } return false; } //--> </script>
habe ich bislang allerdings nur mit firefox 1.06 und IE 6.0 getestet
na denn, schönes wochenende noch allerseits!
|
|
|
14.08.2006, 10:28
|
#12
|
|
TP-Moderator
Registriert seit: Jan 2003
Ort: Wien
|
Zitat:
|
Zitat von lxxl
tja, wohl unmöglich, was ich da verlange, wa?
|
Ungeduldig?
War über das Wochenende nicht daheim, deshalb keine weitere Antwort. Aber schön zu sehen, dass du das Problem mittlerweile sowieso selbst gelöst hast. 
|
|
|
14.08.2006, 12:36
|
#13
|
|
TP-Member
Registriert seit: Apr 2005
|
nix für ungut, meine ungeduld hat sich bestimmt nicht gegen dich gerichtet. ich hatte mich mit dem problem wohl schon etwas zu lange herumgeschlagen. dabei war ich eigentlich der meinung, dass es sich hier um eine lappalie handelt, die sich im nu erledigt hat.
nun denn, jetzt ist alles bene. mögen andere fürderhin schneller zur lösung kommen. 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:49 Uhr.
|
 |