Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 15:29 Der er 22 kommentarer og
1 løsning

Timeglas/popup ifm reload af siden

Hejsa

Jeg har en JSP-side hvor der til tider foregår nogle tidskrævende aktiviteter. Når siden så kalder sig selv, ønsker jeg at lave et popup-windue der virker lidt på samme måde som et timeglas - altså informerer brugeren om at serveren arbejder.

Men jeg har ikke rigtig kunne få det til at virke.

Har et javascript der lavet mit popup-windue:
UserMessagePopup(msg){
var popupwindue = window.open(......);
var str = "<en masse html>";
popupwindue.document.write(str);
popupwindue.document.close();
}

Inden i <en masse html> har jeg bl.a.:
setTimeout('self.close()',10000)

Nu vil jeg gerne om dette javasript blev kaldt som det først af alt hvad sker på siden, så popup bliver vist - og at der bliver kørt en popup.close(); som det sidste på siden.

Hvordan kan dette lade sig gøre - hvis det er muligt?

mvh
vedikkebedre
...
}
Avatar billede roenving Novice
26. oktober 2004 - 15:33 #1
Er det på din jsp-side, at du vil lukke popuppen ?-)
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 15:38 #2
ja

Jeg forventede et eller andet i retning af at kunne benytte < body onload=...> til at starte scriptet som det første der sker. men kan ikke få det lukket igen, uden at bruge timer. Og det er lidt ufiks at bruge en timer der først lukker længe efter siden er loaded....
Avatar billede roenving Novice
26. oktober 2004 - 15:44 #3
Hvis du genbruger windowName (2. parameter i window.open !-) kan du tilgå det samme popup-vindue, og så f.eks. bare sende:

var pop = window.open('','popup');
var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt';
pop.document.write(txt);
pop.document.close();
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 15:54 #4
min kode er lige pt:

function UserMessagePopup(msg){   
    var popwin = window.open("","popwin","toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=320,height=120");
 
  var str = "";
  str += "<html>";
  str += "<head>";
  str += "</head>";
  str += "<body onload=\"setTimeout('self.close()')\">";
  str += "<table align=\"center\">";
  str += "<tr align=\"center\"><td>";
  str += "<h3>" + msg +"</h3>";
  str += "</td></tr>";
  str += "<tr><td>";
  str += "<img src=\"/images/NEUX_AnimNordiNet.gif\" />";
  str += "</td></tr>";
  str += "</table>";
  str += "</body>";
  str += "</html>";

  popwin.document.write(str);
  popwin.document.close();

return popwin;
}
...
...
<body onbeforeunload="java script:nnitFlytFiler_UserMessagePopup('Vent venligst ....')" >


Mit problem lige nu er at popup først kommer når siden er ved at være færdig med at loade. Så det er kun et split sekund man ser popup - og ikke mens der loades og laves det tidskrævende arbejde.

Nogle forslag ....????

mvh
vedikkebedre
Avatar billede roenving Novice
26. oktober 2004 - 16:04 #5
For det første skal der jo en tid på setTimeout'en:

  str += "<body onload=\"setTimeout('self.close()',10000)\">";

-- og så er det noget gris at bruge java script: pseudoprotokollen i en javascript-event, da det selvfølgelig er overflødigt at fortælle javascript, at den skal udføre javascript-kommandoer ...

-- at det så er ugyldig javascript-kode er vist et akademisk spørgsmål, da alle de browsere, jeg har set, ikke kløjs i det !-)

-- og hvad er nnitFlytFiler for noget, er det sådan koden ser ud i browseren, for jeg kan ikke finde nogen objekter, som hedder sådan ...

<body onbeforeunload="UserMessagePopup('Vent venligst ....')" >

-- og hvis du så vil tvangslukke popuppen, når den nye side er indlæst, placerer du blot ovenstående sidst i den nye fil:

<script type="text/javascript">
var pop = window.open('','popwin');
var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt>';
pop.document.write(txt);
pop.document.close();
</script>
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 17:26 #6
"nnitFlytfiler" var en copi/paste fejl fra et ældre script  :-)

Jeg vil afprøve dit forlag senere på aftenen og vende tilbage
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 19:58 #7
kan ikke få det til at virke :(

Har nu følgende stumper kode:

java script:
function UserMessagePopup(msg){   
    var popwin = window.open("","","toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=320,height=120");
 
  var str = "";
  str += "<html>";
  str += "<head>";
  str += "</head>";
  str += "<body onload=\"setTimeout('self.close()',10000)\">";
  str += "<table align=\"center\">";
  str += "<tr align=\"center\"><td>";
  str += "<h3>" + msg +"</h3>";
  str += "</td></tr>";
  str += "<tr><td>";
  str += "<img src=\"/images/NEUX_AnimNordiNet.gif\" />";
  str += "</td></tr>";
  str += "</table>";
  str += "</body>";
  str += "</html>";

  popwin.document.write(str);
  popwin.document.close();

return popwin;
}

Har en <body> der er sådan her:
<body onbeforeunload="UserMessagePopup('Vent venligst ....')" >

og har til sidst som roenving skrev:
</html>
<script type="text/javascript">
var pop = window.open('','popwin');
var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt>';
pop.document.write(txt);
pop.document.close();
</script>

som det sidste - helt efter </html>.

Men jeg får en fejl ved afvikling:
Line 816
Char 1
Access is denied
Code: 0

"Line 816" er lige med "pop.document.close();" når jeg tager "view source" på siden.

Den loader, men vises med fejl - og der åbnes 2 popup, hvor ingen lukkes før end efter de 10sek.

Nogle forslag .....?

mvh
vedikkebedre
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 20:00 #8
Hvis jeg fjerne følgende linie:
pop.document.close();

får jeg ingen fejl ved load af siden. Men der åbnes stadig 2 popup - og ingen af dem lukkes igen før timeout træder i kraft.
Avatar billede roenving Novice
26. oktober 2004 - 20:05 #9
Jamen, hvorfor har du også fjernet windowName fra UserMessagePopup ?-)

Det er det allervigtigste, da du kun kan genbruge popups, hvis de har det samme windowName ...

function UserMessagePopup(msg){   
    var popwin = window.open("","popwin","...")


-- og så skal du helst ikke sætte noget udenfor html, men helst placere det lige før </body> !-)
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 20:22 #10
Har nu følgende:


var popwin;

function UserMessagePopup(msg){   
    var popwin = window.open("","popwin","toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=320,height=120");
 
  var str = "";
  str += "<html>";
  str += "<head>";
  str += "</head>";
  str += "<body onload=\"setTimeout('self.close()',10000)\">";
  str += "<table align=\"center\">";
  str += "<tr align=\"center\"><td>";
  str += "<h3>" + msg +"</h3>";
  str += "</td></tr>";
  str += "<tr><td>";
  str += "<img src=\"/images/NEUX_AnimNordiNet.gif\" />";
  str += "</td></tr>";
  str += "</table>";
  str += "</body>";
  str += "</html>";

  popwin.document.write(str);
  popwin.document.close();

return popwin;
}



<body onbeforeunload="UserMessagePopup('Vent venligst ....')" >

<script type="text/javascript">
var pop = window.open('','popwin');
var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt>';
pop.document.write(txt);
pop.document.close();
</script>
</body>
</html>


Men får stadig fejl.

problemet efter reload af siden er:  pop.document.close();

Men ellers virker det funktionelt. Popup åbnes og lukkes korrekt - men siden har en fejl i sig  :(

venligst forsæt hjælpen ....  den er værdsat

mvh
vedikkebedre
Avatar billede roenving Novice
26. oktober 2004 - 20:25 #11
Hvad siger fejlen ?-)
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 20:26 #12
det samme som før.
Char 1
Access is denied
Code: 0
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 20:28 #13
i samme linie som før:
pop.document.close();
Avatar billede roenving Novice
26. oktober 2004 - 20:33 #14
Prøv sådan:

<script language="javascript" type="text/javascript">
var pop = {'closed':true}
function lukVindue(){
  var pop = window.open('','Karl');
  var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt>';
  pop.document.write(txt);
  if(!pop.closed)pop.document.close();
}
</script>
</body>
</html>
Avatar billede roenving Novice
26. oktober 2004 - 20:34 #15
-- det ser ud til, at javascriptet eksekveres uden at dokumentet lukkes, men for en sikkerheds skyld har jeg bibeholdt funktionen !-)
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 20:36 #16
har fjernet linien:
pop.document.close();

og det ser faktisk ud til at virke ...!??????
Avatar billede vedikkebedre Nybegynder
26. oktober 2004 - 20:43 #17
har lige prøvet med dit script roenving. Men det får ikke altid lukket popup.

Så nu kører jeg videre med dit script - dog uden linien:
pop.document.close();

for så virker det.

men jeg ved ikke hvad der lige får det til at virke - eller hvad der reelt lukker popup ???


Smid et svar roenving - du får dine meget fortjente point

mvh
vedikkebedre
Avatar billede roenving Novice
26. oktober 2004 - 20:44 #18
-- det turde jeg så ikke, men den anden konstruktion tager så højde for at vinduet evt. ikke mere findes !-)

-- prøv også lige at teste i alternative browsere !-)

-- den løsning, jeg gav virker i hvert fald også i Mozilla !-)
Avatar billede roenving Novice
26. oktober 2004 - 20:45 #19
-- hov, jeg gav jo også et andet windownmae i min test, så der skal selvfølgelig ikke stå Karl, men popwin !-)

Velbekomme '-)
Avatar billede vedikkebedre Nybegynder
27. oktober 2004 - 08:32 #20
Hej roenving

Har forsøgt med din sidste kode:
<script language="javascript" type="text/javascript">
var pop = {'closed':true}
function lukVindue(){
  var pop = window.open('','popwin');
  var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt>';
  pop.document.write(txt);
  if(!pop.closed)pop.document.close();
}
</script>
</body>
</html>

Den får bare ikke lukket for popup-winduet.

Men hvis jeg benytter følgende kode:
<script type="text/javascript">
var pop = window.open('','popwin');
var txt = '<scr'+'ipt type="text/javascript">self.close()<\57scr'+'ipt>';
pop.document.write(txt);
</script>

så virker det ????

Det forstår jeg jo ikke meget af, idet jeg jo ikke afvikler nogen close() på noget tidspunkt???

Men der er vil visse ting her i verden som man ikke skal kunne forklarer - en af tingene kan så være den her........

Smid et svar roenving, og få nogle fortjente point. Du har været en stor hjælp!

mvh
vedikkebedre
Avatar billede roenving Novice
27. oktober 2004 - 18:27 #21
-- tjah, du udfører jo den self.close(), som ligger i scriptet, for document.close() har en fuldstændig anderledes funktion, nemlig at fortælle browseren, at den ikke skal forvente, at der kommer mere html-kode, så den roligt kan gå i gang med at tegne siden ...

Velbekomme '-)
Avatar billede vedikkebedre Nybegynder
28. oktober 2004 - 08:30 #22
Hej roenving

Et tillægsspørgs - hvis du vil ...???

Når jeg lukker hele siden ned - f.eks. ved at trykke på browserens kryds oppe i højre hjørne -  så starter popup, men det lukkes jo ikke før end timeout er nået.

Kan man undgå dette på noget måde ???

mvh
vedikkebedre
Avatar billede roenving Novice
28. oktober 2004 - 14:15 #23
Det tror jeg ikke, for det er ikke lykkedes mig at finde nogen metode (som var bare nogenlunde sikker !-) til at detecte brugerhandlinger udenfor browserens bruger-vindue ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester