Browser verliert Window (Popup) Name nach 700ms

steyrblade

Mitglied
Hallo.
Ich habe in meiner Parent Seite eine Javascript Funktion in der ich ganz normal ein Popupfenster öffne:
Code:
options="resizable=1,scrollbars=1,toolbar=0,menubar=0,location=0,directory=0, width=130,height=130";
fensterx= window.open("popup.php", "popup_fenster",options);
und möchte das Fenster nach bestimmten Bearbeitungen der Parent Seite von der Parent Seite aus wieder schließen.

Code:
fensterx.close();
(im javascript natürlich)
==> hatte nicht funktioniert


Jetzt der wichtige Teil:
Wenn ich direkt in der window.open funktion
Code:
setTimeout('fensterx.close();',700);
mache schließt das Fenster nach 700ms wieder.
Wenn ich einen Wert über 700 verwende schließt das fenster nicht mehr.
Verliert der Browser (IE und FF) da durch eine Einstellung den Namen des fensters
 
Zuletzt bearbeitet:
Das ist ein Intranet Tool und hat ca.Tausend Zeilen.

Ich werde es jetzt mal mit einem neuen File versuchen in dem nur dieser Code steht. Vielleicht liegt es ja an anderen Javascript Codesnipseln.

Ich habe das Problem aber schon in einem anderen Foren gefunden.
Leider gab es dort auch keine weitere Hilfe


Vielleicht fällt ja noch jemand was ein.
 
Also geht auch nicht wenn ich nur den Problem Code in ein neues File einfüge

in der index.php steht
Code:
<html>
<script language=javascript> 
<!--

function open_load_pop_up() 
{      
options="resizable=1,scrollbars=1,toolbar=0,menubar=0,location=0,directory=0,    width=140,height=140"; 
var test_fenster = window.open("ladepopup.php",'',options);
alert(test_fenster);  
}
//--> 
</script>

<a href='' onClick="javascript:open_load_pop_up();">link</a>
<html>


und in dem Popup File:
Code:
<html>
<script language=javascript> 
<!--  
 alert(test_fenster);  
//--> 
</script>
</html>

Wenn man auf den Link in der Index klickt öffnet das neue Fenster.
Was hier gleich auffällt ist, das der alert im neuen Fenster (Popup) nicht geht.
Nur der von der Index funktioniert.
Weiss das eigene Fenster nicht wie es heisst.

wenn ich in dem Fenster vor dem alert
test_fenster = this.window;
einfüge weiss es natürlich wieder wie es heisst
aber wenn ich dann am ende des Index files dann nochmal

Code:
<script language=javascript> 
<!-- 
alert(test_fenster);
//--> 
</script>
reinmache funktioniert es schon wieder nicht mehr.
Der verliert dauernd die Bezeichnung des Popup Fensters
 
Zuletzt bearbeitet:
<script language=javascript> muss eigentlich <script langugage="javascript"> heißen, aber auch das ist ja nicht besonders gut, weil das language-Attribut inzwischen depreciatet ist. Ideal wäre <script type="text/javascript">

Außerdem, gehört in einen onClick kein "javascript:" rein. Ein onClick ist per definition Javascript und der "javascript:"-Zusatz ist für href-Attribute gedacht und selbst da ist er eigentlich in Relikt aus grauer Vorzeit, dass nur Probleme macht.

Ganz nebenbei schreiben sich neuerdings alle attribute, also auch Javascript-Events wie onclick durchgehend klein (also "onclick" statt "onClick").

Und du solltest eine Sorte von Anführungszeichen in Attributen verwenden: Entweder einfach ('blubb') oder doppelt ("blubb"), aber nicht gemischt.

So nun, da das technische geklärt ist zum eigentlichen Fehler: Deine Variable "test_fenster" existiert nur innerhalb der Funktion. Damit sie überhaupt außerhalb existiert, musst du sie auch außerhalb initialisieren. Also so
HTML:
<html>
<script type="text/javascript"> 
<!--
var test_fenster;
function open_load_pop_up() 
{      
options="resizable=1,scrollbars=1,toolbar=0,menubar=0,location=0,directory=0,    width=140,height=140"; 
test_fenster = window.open("ladepopup.php",'',options);
alert(test_fenster);  
}
//--> 
</script>

<a href="" onclick="open_load_pop_up();">link</a>
<html>
Nun kannst du aber nicht so einfach von einem PopUp aus auf Variablen im Öffner-Fenster zugreifen. Für ein PopUp wird quasi ein ganz eigener Satz Variablen geschaffen. Bei einem PopUp handelt es sich ja um ein neues Fenster. Woher soll Javascript wissen, dass du damit nicht eine externe Seite aufrufst oder so? Denn wenn du eine externe Seite aufriefst, könnte dort je eine Variable vorkommen, die gleich heißt, wie eine Variable auf deiner Öffnerseite und dann würde es zu Konflikten kommen.
Du musst also über das opener-Obhekt auf die Variable zugreifen
HTML:
<html>
<script type="text/javascript">
<!--  
 alert(opener.test_fenster);  
//--> 
</script>
</html>
Sollte funktionieren, wenn du die anderen Sachen auch ausbesserst. Aber ich verstehe nicht, wieso du überhaupt so auf das Fenster zugreifen willst, wenn du eh schon gemerkt hast, dass es mit this.window geht.
 
Zuletzt bearbeitet:
Hallo,

steyrblade hat gesagt.:
Code:
<html>
<script language=javascript> 
<!--  
 alert(test_fenster);  
//--> 
</script>
</html>

Wenn man auf den Link in der Index klickt öffnet das neue Fenster.
Was hier gleich auffällt ist, das der alert im neuen Fenster (Popup) nicht geht.
Nur der von der Index funktioniert.
Weiss das eigene Fenster nicht wie es heisst.
Woher auch? Jede im Browser angezeigte Seite besitzt einen eigenen JavaScript-Kontext. Die Variablen der aufrufenden Seite werden also nicht in die aufgerufene Seite übernommen. Daher ist natürlich auch test_fenster nicht gesetzt. Macht aber nicht, schließlich verweisen this, window und self ja auf dasselbe Objekt.

Wegen des Problems, dass du außerhalb der Funktion open_load_pop_up() nicht auf test_fenster zugreifen kannst: bist du dir der Bedeutung des Schlüsselwortes var bewusst?

Grüße,
Matthias

<edit>
con-f-use hat gesagt.:
So nun, da das technische geklärt ist zum eigentlichen Fehler: Deine Variable "test_fenster" existiert nur innerhalb der Funktion. Damit sie überhaupt außerhalb existiert, musst du sie auch außerhalb initialisieren.
Das stimmt so nicht. Globale Variablen können innerhalb von Funktionen auch ohne vorherige Deklaration gesetzt werden:
Javascript:
function foo() { bar = 42; }
foo();
alert(bar); // => 42
</edit>
 
Stimmt... hatte ich vergessen, das die variable nur innerhalb der funktion bekannt ist
(Die fehlende Konventionseinhaltung ist ja erst mal nebensächlich würd ich sagen.)

Aber mit

Code:
var test_fenster;

vor der Funktion ist es auch nicht getahn. Denn dadurch ist dann zwar die variable bekannt aber hat keinen Inhalt, da das setzen ja in der funktion ist.
Wie kann ich eine Variable nochmal als Global deklarieren.
Dadruch müsste es ja dann funktionieren.

Nochmal dazu was ich eigentlich machen will.
Das scheint noch nicht ganz klar zu sein.

Ich möchte ein Popup aus der parent Seite aus öffnen und wenn die Parent Seite fertig geladen ist das Popup wieder von der Parent Seite aus schließen. (Kann bis 1min dauern)

Wenn es eine normale Zeitsteuerung wäre würde ich das close mit nem timeout in das Popup machen. Da ich aber nicht weiss wie lange es dauert, soll es eben von der Hauptseite wieder geschlossen werden.


Ich habe gerade nochmal was getestet:
Wenn ich in der open funktion direkt wieder ein close mache funktioniert es.
Wenn ich aber das ganze mit setTimeout('test_fenster.close();',1000);
mache geht es nicht mehr.
Es wird auch keine variable vom if ins else in einer funktion übergeben.
Ich kenn mich in js nicht besonders aus.
In PHP würde das ohne weiteres gehen.

Wenn ich var weg lasse sollte es ja eine globale variable sein. Macht aber auch keinen Unterschied
 
Zuletzt bearbeitet:
Hallo,

steyrblade hat gesagt.:
Ich habe gerade nochmal was getestet:
Wenn ich in der open funktion direkt wieder ein close mache funktioniert es.
Wenn ich aber das ganze mit setTimeout('test_fenster.close();',1000);
mache geht es nicht mehr.
Dann hast du deine Variable wieder als lokal deklariert. Tu dir doch den Gefallen und informiere dich mal an entsprechender Stelle über Variablen in JavaScript (z.B. bei SelfHTML).

Folgendes Minimalbeispiel funktioniert bei mir tadellos:
Javascript:
function open_popup() {
    popup = window.open('about:blank');
    window.setTimeout('popup.close()', 2000);
}

Es wird auch keine variable vom if ins else in einer funktion übergeben.
Wie meinst du das?

Ich kenn mich in js nicht besonders aus.
In PHP würde das ohne weiteres gehen.
Auch in PHP haben Variablen nur einen gewissen Gültigkeitsbereich. Auf globale Variablen hat man beispielsweise innerhalb von Funktionen nicht unmittelbar Zugriff. Andersherum kann man auch nicht von außerhalb auf Variablen zugreifen, die innerhalb einer Funktion deklariert wurden.

Grüße,
Matthias
 
var davor local
ohne var global
soweit is ja klar

Das mit if zu else war quatsch hatte mich vertan.
ich hatte in einer funktion ein if und else
Code:
 if($checkvar=="open")
 {
 options="resizable=1,scrollbars=1,toolbar=0,menubar=0,location=0,directory=0,  width=140,height=140";
 test_fenster = window.open("ladepopup.php",'',options);
 }     
 else
 {   
   window.test_fenster.close(); 
 }
Ich hatte jetzt zum öffnen eben ein open mit übergeben und zum schließen ein close
Die funktion behält aber wie ich jetzt gemerkt habe die variable test_fenster nicht bis zum erneuten Aufruf. => sprich bei else kannte er test_fenster nicht mehr

Könntet mir vielleicht einfach nen entsprechenden Code schreiben.
=>eine Funktion in der ich je nach inhalt der übergebenen variable das fenster öffne bzw. schließe.
Danke
 

Neue Beiträge

Zurück