open()
Jörg Wittemeier
- javascript
Hallo !
Ich öffne mit
<script language="JavaScript">
function wintwo(Ziel)
{
opp = window.open(Ziel,"wintwo","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
opp.focus();
}
</script>
und
<a href="javascript:wintwo('layout.htm')">hier</a>
ein zweites Fenster.
Wenn ich erneut das Fenster öffnen will und es noch nicht geschlossen ist, kommt es zu einer Fehlermeldung (nur MSIE).
"Zugriff wurde verweigert"
Unter Netscape läuft alles prima.
Gruß
Jörg
Hallo!
Zunächst kann das daran liegen, dass der Fenstername im window.open der gleiche ist wie der Name der Function... so was sollte man nach Möglichkeit vermeiden, genauso wie Variablen nicht den gleichen Namen wie die Functionen haben sollten.
Ansonsten: Ich hatte ein ähnliches Problem und habe das mit einigen Zeilen Code aus einem Script von Christine Kuehnel ([linK:http://www.screenexa.net/js_notiz/]) gelöst:
Oberhalb der Function:
Protokoll = self.location.protocol;
Pfad = self.location.pathname;
Basis = Protokoll + '//' + Pfad.substring(1,Pfad.length-11)
wintwo = null;
<script language="JavaScript">
function wintwo(Ziel)
{
opp = window.open(Ziel,"wintwo","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
opp.focus();
}
</script>
In der Function, direct über dem window.open:
if (wintwo != null)
if (!wintwo.closed)
wintwo.close();
das Ganze würde dann so aussehen (mit umbenannter Function):
<script language="JavaScript">
<!--
Protokoll = self.location.protocol;
Pfad = self.location.pathname;
Basis = Protokoll + '//' + Pfad.substring(1,Pfad.length-11)
wintwo = null;
function machauf(Ziel)
{
if (wintwo != null)
if (!wintwo.closed)
wintwo.close();
opp = window.open(Ziel,"wintwo","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0"); opp.focus();
}
//-->
</script>
Probier's mal.
Bis danndann
PAF (patrickausfrankfurt)
hi patrick
erstmal vielen dank für die ausführlichen erklärungen.
scheint mit deinem script zu funktionieren, jedoch mit dem focus klappt es nicht mehr.
"Fehler in Zeile 19" und das ist: opp.focus();
nehme ich den teil raus, klappt es ohne fehlermeldung, jedoch auch ohne focus :-)
gruß
jörg
die lösung:
<script language="JavaScript">
function machauf(Ziel)
{
win = window.open(Ziel,"Zweitfenster","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
if (win != null)
if (win.closed);
win.focus();
}
</script>
funzt mit ns und msie
besten dank
jörg
Hallo Jörg!
Eine Hand wäscht die andere, nennt man wohl sowas ;-)
Denn mit Deiner
lösung:
<script language="JavaScript">
function machauf(Ziel)
{
win = window.open(Ziel,"Zweitfenster","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
if (win != null)
if (win.closed);
win.focus();
}
</script>
brauche ich nächste Woche dann meine grauen Zellen nicht zu bemühen: ich arbeite dann an eine Seite, wo ich das mit dem focus() gebrauchen kann!
besten dank
so auch an Dich!
Bis danndann
PAF (patrickausfrankfurt)
Hi Leut's!
win = window.open(Ziel,"Zweitfenster","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
if (win != null)
if (win.closed);
win.focus();
Aeh, hast Du das ausprobiert? Das was dort steht, macht einfach IMMER ein win.focus(). Die if-Abfragen schliesst Du naemlich einfach mit einem ; ab, d.h. selbst wenn die Abfragen alle true ergeben, passiert nichts, denn da steht ja nichts, was passieren soll. Beim ; ist die Anweisung zu Ende.
Wahrscheinlich hast Du eher sowas gemeint:
if (win != null) // kuerzer: if (win)
if (!win.closed)
win.focus();
if (win != null) bzw. if (win) ergibt immer true, da Du ja gerade das Fenster aufgemacht hast und das window-Objekt an win zugewiesen hast. Du kannst es also ganz weglassen.
Wenn sich das Fenster nicht augenblicklich wieder selber schliesst, ergibt auch if(!win.closed) immer true. Kannst Du also auch weglassen. Damit waeren wir dann wieder am Anfang. Du fuehrst das focus() *immer* aus.
Warum gab es nun diesen Fehler in Zeile 19 in Patrick's Script? (Es muss nicht das focus() gewesen sein, denn die open()-Anweisung stand in derselben Zeile.)
Protokoll = self.location.protocol;
Pfad = self.location.pathname;
Basis = Protokoll + '//' + Pfad.substring(1,Pfad.length-11)
wintwo = null;function machauf(Ziel)
»» {
if (wintwo != null)
if (!wintwo.closed)
wintwo.close();
»» opp = window.open(Ziel,"wintwo","resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0"); opp.focus();
»» }
Ich schaetze, das kunterbunte Treiben der Variablen- und Fensternamen hat den Browser dann doch etwas verwirrt. Denn erst wird mit wintwo = null; eine Variable wintwo definiert. Dann wird bei window.open ein Fenster mit diesem Namen gebaut. Von Antje haben wir gelernt (<../../sfarchiv/1999_3/t06448.htm#a31588>), dass dadurch unterhalb von des window-Objekts automatisch eine Variable wintwo angelegt werden will. Aber da gibt es jetzt schon eine, denn es wurde eine mit dem Wert null angelegt. Na gut, warum dann das focus() schiefgehen soll, weiss ich auch nicht. Aber vielleicht ist ja schon das open() schiefgegangen (logischer waer's jedenfalls). Wurde denn ueberhaupt ein neues Fenster aufgemacht? Ich schlage jedenfalls vor, erstmal fuer alles eindeutige Namen festzulegen.
Protokoll = self.location.protocol;
Pfad = self.location.pathname;
Basis = Protokoll + '//' + Pfad.substring(1,Pfad.length-11)
wintwo = null;
function machauf(Ziel) {
if (wintwo != null)
if (!wintwo.closed)
wintwo.close();
wintwo = window.open(Ziel, "wintwofenster", "resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
if (wintwo.focus) wintwo.focus(); // aeltere Browser (vor JS1.2) ausschliessen
}
Ok, versucht das mal, vielleicht hilft's.
Bye, Calocybe
Moin Joerg!
IMO liegt das daran, dass du ein Fenster mit dem Namen `wintwo‚ offen hast, und nochmal eines oeffnen willst, was nicht geht... (sonst waeren ja Fensternamen an sich ueberfluessig, da diese ja dazu dienen sollen, ein Fenster zu identifizieren...)
vielleicht solltest du einfach aus dem Fensternamen eine Variable machen, die du dann jedesmal mit dem Aufruf belegst...
also in etwa so:
<script language="JavaScript">
function wintwo(Ziel,Name)
{
opp = window.open([Ziel],[Name],"resizable=1,scrollbars=1,width=280,height=450,screenX=0,screenY=0,left=0,top=0");
opp.focus();
}
</script>
und diese dann mit
<a href="javascript:wintwo('layout.htm','der-name-des-Fensters'')">hier</a>
aufrufen...
auf diese Weise bist du uebrigens recht variabel, ich zum Beispiel habe meine Scripts ja alle in einer zentralen Datei hinterlegt, und dieses script sieht bei mir so aus:
function PicPopUp(URL,FN,WH)
{
BildFenster =
window.open([URL], [FN], [WH]);
BildFenster.focus();
}
dadurch kann ich dann das Ziel (URL), den Fensternamen (FN) und die uebrigen Angaben zum Fenster (WH) in meinen Links frei angeben... recht variabel....
also zumindest bei mir klappt das so...
Boris