Pop Up schliessen
timmy
- javascript
Hallo
Ich habe die frage schon weiter unten gestellt, aber der thread ist wohl zu weit unten dass wohl niemand mehr hineinschaut.
Das Problem:
Ich habe bei meinem Formular folgenden (relevanten Code:
***********************************************************************
<body onunload="return schliessen();">
<form name="frmSend" action="front.asp" onsubmit="return check();">
Kommentar: die form verweist auf sich selbst.
***********************************************************************
im <script> Teil von front.asp steht folgendes:
***********************************************************************
function check() {
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")
}
function schliessen() {
var xmlhttp = false;
var url = "http://COMPUTERNAME/besetzt.txt"
function macheRequest(url)
{
{ // IE
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlhttp)
{
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
xmlhttp.onreadystatechange = alertInhalt;
xmlhttp.open('HEAD', url, true);
xmlhttp.send(null);
}
function alertInhalt() {
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status != 200)
{
window.opener = window1;
window1.close();
}
else
{
window.setTimeout(macheRequest(url), 2000)
}
}
}
}
***********************************************************************
Im grossen und ganzen muss das pop up beim abschicken des Formulars auf gehen. Es muss so lange aufbleiben, bis per HTTP Request die Datei http://COMPUTERNAME/besetzt NICHT mehr erreichbar ist. Im Moment geht das Pop up zwar auf, jedoc nicht mehr zu.
window.opener=window1;
window1.close();
habe ich auch schon durch ersetzt:
function schliessen() {
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")
var xmlhttp = false;
var url = "http://COMPUTERNAME/besetzt.txt"
....
if (xmlhttp.status != 200)
{
window1.close();
}
weiss jemand weiter?
Hallo timmy.
Ich habe die frage schon weiter unten gestellt, aber der thread ist wohl zu weit unten dass wohl niemand mehr hineinschaut.
Das ist Unsinn. Wenn jemand eine Antwort weiß, wird er auch in diesem Thread antworten.
Weitergehende Informationen solltest du deshalb auch dort posten.
Einen schönen Montag noch.
Gruß, Mathias
Ich habe die frage schon weiter unten gestellt, aber der thread ist wohl zu weit unten dass wohl niemand mehr hineinschaut.
Das ist Unsinn. Wenn jemand eine Antwort weiß, wird er auch in diesem Thread antworten.
Im Prinzip ja, aber ...
Weitergehende Informationen solltest du deshalb auch dort posten.
Naja, die ursprüngliche Frage hat mit dem jetzigen Problem (zumindest für Aussenstehende) eigentlich nichts mehr zu tun. der OP stochert da zwar etwas im Dunkeln, aber die Frage nach einer sleep/wait Funktion und ein Popup zu schleissen sind doch 2 völlig verschiedene Dinge.
Struppi.
Im grossen und ganzen muss das pop up beim abschicken des Formulars auf gehen. Es muss so lange aufbleiben, bis per HTTP Request die Datei http://COMPUTERNAME/besetzt NICHT mehr erreichbar ist. Im Moment geht das Pop up zwar auf, jedoc nicht mehr zu.
window.opener=window1;
window1.close();habe ich auch schon durch ersetzt:
Das ist auch völliger Blödsinn, deine Frage war gewesen wie du diese Meldung wegkriegst. Die hatte aber nichts mit deinem eigentlichen Problem zu tun, da die Meldung bei einem Popup nicht kommt.
function schliessen() {
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")
window1.close();
genauso geht es. Wenn es nicht klappt, dann verschweigst du die Fhelermeldung oder Code.
Struppi.
function schliessen() {
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")window1.close();
genauso geht es. Wenn es nicht klappt, dann verschweigst du die Fhelermeldung oder Code.
Struppi.
Hallo Struppi
Es passiert gar nichts. Ich krieg nicht mal ne Fehlermeldung! Das Pop up bleibt einfach offen und animiert weiter fröhlich vor sich hin...
Code in diesem Fall wäre:
*********************************************
function check() {
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")
}
function schliessen() {
var xmlhttp = false;
var url = "http://COMPUTERNAME/besetzt.txt"
function macheRequest(url)
{
{ // IE
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlhttp)
{
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
xmlhttp.onreadystatechange = alertInhalt;
xmlhttp.open('HEAD', url, true);
xmlhttp.send(null);
}
function alertInhalt() {
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status != 200)
{
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")
window1.close();
}
else
{
window.setTimeout(macheRequest(url), 2000)
}
}
}
}
***************************************************************
wobei ich das window1.open wie oben gezeigt und am anfang der funktion schliessen() eingesetzt habe. beides hat nicht geholfen.
Es passiert gar nichts. Ich krieg nicht mal ne Fehlermeldung! Das Pop up bleibt einfach offen und animiert weiter fröhlich vor sich hin...
Also entweder übersiehst du die Fehlermeldung, oder es passieren nicht die Dinge die du erwartest. Bei ersten wäre die Frage ob du weisst, wie du die Fehlermeldung in deinem Browser ermittelst, im zweiteren Fall solltest du einfach mal an den enstsprechenden Stellen ein alert() einbauen und evtl. die von dir benutzen Variabeln anzeigen lassen.
function schliessen() {
var xmlhttp = false;
var url = "http://COMPUTERNAME/besetzt.txt"
function macheRequest(url)
{
{ // IE
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlhttp)
{
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
Du willlst das wirklich nur im IE laufen lassen?
Der hat damit noch am meisten Probleme.
function alertInhalt() {
Hier kannst du testen, wird die Funktion überhaupt jemals aufgerufen.
if (xmlhttp.readyState == 4)
welchen Wert hat die Eigenschaft readyState bei den aufrufen überhaupt?
{
if (xmlhttp.status != 200)
und der status?
{
window1=window.open('check.html', "fenster", "width=300,height=75,left=620,top=475, status=no, toolbar=no, menubar=no, hotkeys=yes, scrollbars=no")
window1.close();
soweit ich das verstehe, willst du wenn die Anfrage keinen status 200 hat ein Fenster öffnen?
}
else
{
window.setTimeout(macheRequest(url), 2000)
und nach 2 Sekunden einen neuen Request. Ist der Aufruf von setTimeout richtig? akzeptiert das der IE?
üblicherwiese hast du als ersten Parameter einen String oder eine Funktionsreferenz, du benutzt hier weder das eine noch das andere. Ich kann mir nicht vorstellen dass der IE hier keinen Fehler wirft, weiß es aber nicht.
Struppi.
Du willlst das wirklich nur im IE laufen lassen?
Der hat damit noch am meisten Probleme.
Ja, es muss und wird wirklich nur im IE laufen.
}
else
{
window.setTimeout(macheRequest(url), 2000)
»»
Das Pop up wird beim abschicken des Formulars geöffnet und wenn die Datei besetzt. txt NICHT mehr existiert wieder geschlossen.
und nach 2 Sekunden einen neuen Request. Ist der Aufruf von setTimeout richtig? akzeptiert das der IE?
Genau, nach 2 sec kommt eine erneute Abfrage.
üblicherwiese hast du als ersten Parameter einen String oder eine Funktionsreferenz, du benutzt hier weder das eine noch das andere. Ich kann mir nicht vorstellen dass der IE hier keinen Fehler wirft, weiß es aber nicht.
Das Script hat Standalone, also ohne schliessen des Pop ups nur mit einem alert funktioniert. Wenn man auf einen Button klickt ist es so lange geloffen, bis die Datei nicht mehr im Vereichniss war. Dann hat es sich selber geschlossen.
Es kann allerdings sein, dass ich im Pop up selber den Code einbauen müsste.
window.setTimeout(macheRequest(url), 2000)
»»
Das Pop up wird beim abschicken des Formulars geöffnet und wenn die Datei besetzt. txt NICHT mehr existiert wieder geschlossen.und nach 2 Sekunden einen neuen Request. Ist der Aufruf von setTimeout richtig? akzeptiert das der IE?
Genau, nach 2 sec kommt eine erneute Abfrage.
Bist du sicher?
Ich hab grad keinen IE da zum testen. Aber wie gesagt das ist zuminest nicht die übliche Syntax, in selfhtml steht (du schlägst auch dort ab und zu mal nach?) sie auch anders.
Danach müßtest du das in etwa so schreiben:
window.setTimeout("macheRequest('" + url + "')", 2000)
Schöner ist's so:
window.setTimeout(function() { macheRequest(url); } , 2000)
üblicherwiese hast du als ersten Parameter einen String oder eine Funktionsreferenz, du benutzt hier weder das eine noch das andere. Ich kann mir nicht vorstellen dass der IE hier keinen Fehler wirft, weiß es aber nicht.
Das Script hat Standalone, also ohne schliessen des Pop ups nur mit einem alert funktioniert. Wenn man auf einen Button klickt ist es so lange geloffen, bis die Datei nicht mehr im Vereichniss war. Dann hat es sich selber geschlossen.
Das ist zwar nicht meine Frage gewesen, deutet aber auf das Problem hin. Da dein Code eben keinen Timeout auslöst, sondern die Funktion wieder und wieder aufruft und den Rückagbewert der Funktion (undefinier) als Timeoutfunktion setzt (es wird also alle 2 Sekunden eine undefinierte Funktion aufgerufen, daher vermutlich auch keine Fehlermeldung), allerdings rufst du immer wieder macheRequest() auf.
Es kann allerdings sein, dass ich im Pop up selber den Code einbauen müsste.
Was im Popup ist entzieht sich unserem wissen. aber wie schon gesagt:
window1 = window.open(....)
...
window1.close();
ist der richtige und auch funktionierende Code.
Struppi.
Anscheinend kommt der nicht in die schleife rein. er startet zwar die äussere function: macheRequest(url) aber mehr nicht.
Vielleicht mal der funktionierende Code zum besseren Verständniss
*****************************************
<script type="text/javascript" language="javascript">
var xmlhttp = false;
var url = "http://rabmed98/besetzt.txt"
function macheRequest(url)
{
{ // IE
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlhttp)
{
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
xmlhttp.onreadystatechange = alertInhalt;
xmlhttp.open('HEAD', url, true);
xmlhttp.send(null);
}
function alertInhalt() {
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status != 200)
{
self.close();
}
else
{
window.setTimeout(macheRequest(url), 2000)
}
}
}
</script>
<span
style="cursor: pointer; text-decoration: underline"
onclick="macheRequest('http://rabmed98/besetzt.txt')">Einen Request absetzen
</span>
******************************************
wenn man auf den link klickt startet er die schlaufe. sobald man nun die datei besetzt.txt löscht oder verschiebt schliesst sich das fenster.
Anscheinend kommt der nicht in die schleife rein. er startet zwar die äussere function: macheRequest(url) aber mehr nicht.
Ich hatte dir doch eigentlich schon erklärt wo das Problem liegt?
Struppi.
Anscheinend kommt der nicht in die schleife rein. er startet zwar die äussere function: macheRequest(url) aber mehr nicht.
Ich hatte dir doch eigentlich schon erklärt wo das Problem liegt?
Struppi.
mir ist nicht klar, warum es bei dem oben geposteten code funktioniert und bei dem in die site eingebundenen nicht...
ich les jetzt halt einfach nochmals alles genau durch, vielleicht werd ich dann schlauer
mir ist nicht klar, warum es bei dem oben geposteten code funktioniert und bei dem in die site eingebundenen nicht...
Der Punkt ist du rufst die Funktion ja auf, aber nicht verzögert, sondern immer wieder solange der status code nicht 200 ist. Du willst eine Zeitverögerung einbauen tust du aber nicht.
Wobei ich aber nicht weiß was du mit funktioniert meinst, da es hier um ein das Schliessen eines popup geht, vermute ich mal das. Dass sollte so gehen wie du es hier gezeigt hast. Wenn es nicht geht, ..... tja da sind wir wieder am Anfang
Struppi.
So, ich habe nun den Fehler gefunden, hier mal der "sich selber schliessende Code wenn das File weg ist":
*****************************************
var xmlhttp = false;
var url = "http://rabmed98/besetzt.txt"
window.setTimeout(function() { macheRequest(url);}, 1000)
function macheRequest(url)
{
{
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!xmlhttp)
{
alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
return false;
}
xmlhttp.onreadystatechange = alertInhalt;
xmlhttp.open('HEAD', url, true);
xmlhttp.send(null);
}
function alertInhalt()
{
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status != 200)
{
self.close();
}
else
{
window.setTimeout(function() { macheRequest(url);}, 2000)
}
}
}
*********************************************
Die Probleme waren:
1. Die URL wurde falsch übergeben.
2. Es braucht der Timeout am Anfang, da JavaScript anscheinend schneller ist als mein Computer :) Wenn beim abschicken des Formulars das JavaScript gestartet wird und gleichzeitig besetzt.txt erstellt wird ist JavaScript schneller und findet das File noch nicht, folglich es schliesst sich gleich selber wieder!
Ich möchte mich bei dir Bedanken für deine wirklich ausdauernde Geduld ;)
Die Probleme waren:
so 100% hatte ich das die ganze Zeit gar nicht verstanden, aber mittlerweile schon
- Die URL wurde falsch übergeben.
Da du sowieso eine globale Variabel url verwendest hättest du die gar nicht als Parameter gebraucht. (Wobei das aber u.U. keine optimale Lösung ist, falls du mal mehrere Abfragen mit diesem Skript machen willst wird es schwierig, solange du dich auf eine url beschränkst - kein Problem)
- Es braucht der Timeout am Anfang, da JavaScript anscheinend schneller ist als mein Computer :) Wenn beim abschicken des Formulars das JavaScript gestartet wird und gleichzeitig besetzt.txt erstellt wird ist JavaScript schneller und findet das File noch nicht, folglich es schliesst sich gleich selber wieder!
Das ist im Prinzip logisch. Wobei ich nicht mehr genau weiß wie du das JS in's Popup bekommen hast. Aber im Prinzip ist natürlich das JS immer schneller als eine Abfrage über's Netz.
Ich möchte mich bei dir Bedanken für deine wirklich ausdauernde Geduld ;)
gab schon schlimmere ;-)
Ist auch ein interessanter Ansatz um eine Aktion auf dem Server mit dem Client zu überwachen.
Struppi.