[javascript] window.open probleem.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Thomzh
  • Registratie: Oktober 2007
  • Laatst online: 17-11-2024
Ik heb een probleem met javascript. Dit is een van de eerste keren dat ik gebruik maak van deze scriptingtaal, dus waarschijnlijk ziet iemand van jullie het probleem binnen 5 seconden;-)

Het volgende is aan de hand. Ik wil een popup tonen zodra de site verlaten word. (vraag niet waarom, ik weet dat het irritant is;-))
Vereiste #2 is dat de popup niet getoond word als de gebruiker gewoon binnen de site blijft.

Daarvoor had ik het volgende gemaakt:

De functie,
code:
1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
<!--
var weggaan = 1;
function LeaveSite() {
    if(weggaan == 1) {
        window.open("http://websiteadres.tld/popup.html",
"mywindow","menubar=1,resizable=1,width=700,height=200"); return false
     }
}
//-->
</script>


De bodytag,
code:
1
<body onUnload="LeaveSite()">


En een interne link,
code:
1
<a href="#" onclick="weggaan=0"></a>


(de site bevat weinig interne links, dus dit handmatig toevoegen was geen probleem)

Nu moet het als volgt werken: bij een body unload gaat de functie draaien en er komt een popup. Gebruikt een gebruiker echter een internet link, dan wordt weggaan op 0 gezet en dan doet de functie, zoals bedoeld, niks.

Nu het probleem:
Bij mij werkt het prima, in Firefox. Op elke andere computer en in elke andere browser werkt de popup gewoonweg niet. Dit is vreemd, want zo'n bijzondere PC heb ik nu ook weer niet :P
Ziet iemand een foutje in het script dat dit gedrag zou kunnen verklaren?

Acties:
  • 0 Henk 'm!

  • kalizec
  • Registratie: September 2000
  • Laatst online: 17-07 01:45
Als ik je script hier uit probeer werkt het zowel onder IE8 als FF3.6 prima. En met prima bedoel ik dat beide scripts de pop-up blocker (imho terecht) triggeren en geblokkeerd worden.

Er is geen enkele denkbare reden waarom je popup getoond zou moeten worden bij het verlaten van een website. Dan heb je niet begrepen dat de gebruiker op dat moment weg wil en dat je daar dus gehoor aan hoort te geven

Het is om deze reden dat ik niet verwacht dat dit stuk javascript code ooit gaat werken zoals je het wilt, simpelweg omdat al je pop-ups, zelfs als werkt het script, toch gewoon geblokkeerd worden.

Core i5-3570K/ASRock Z75 Pro3/Gigabyte Radeon HD7850/Corsair XMS3 2x4GB/OCZ Vertex2 64GB/3x640GB WD Black/24" B2403WS Iiyama x2/Nec 7200S


Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

kalizec schreef op woensdag 31 maart 2010 @ 19:18:

Er is geen enkele denkbare reden waarom je popup getoond zou moeten worden bij het verlaten van een website. Dan heb je niet begrepen dat de gebruiker op dat moment weg wil en dat je daar dus gehoor aan hoort te geven
wat dacht je bijvoorbeeld van een "unsaved changes" melding oid?

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • Thomzh
  • Registratie: Oktober 2007
  • Laatst online: 17-11-2024
Dat het vervelend is begrijp ik, het is ook niet mijn eigen site..

Probleem bij mij is dan ook dat de popupblokkering niet getriggerd word.

Toch hartelijk dank voor je snelle reactie!

Acties:
  • 0 Henk 'm!

  • kalizec
  • Registratie: September 2000
  • Laatst online: 17-07 01:45
iH8 schreef op woensdag 31 maart 2010 @ 19:26:
[...]


wat dacht je bijvoorbeeld van een "unsaved changes" melding oid?
Dat er onopgeslagen wijzigingen zijn hoor je op het scherm zelf al te tonen en niet via een pop-up af te willen vangen. Op het moment dat een gebruiker beslist weg te willen moet je daar niet voor gaan liggen. Als je daar namelijk voor gaat liggen impliceert dat ook dat je geen rekening houdt met gebruikers die hun browser helemaal afsluiten, het tabblad dicht gooien, het proces killen, etc.

Core i5-3570K/ASRock Z75 Pro3/Gigabyte Radeon HD7850/Corsair XMS3 2x4GB/OCZ Vertex2 64GB/3x640GB WD Black/24" B2403WS Iiyama x2/Nec 7200S


Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

kalizec schreef op woensdag 31 maart 2010 @ 19:38:
[...]


Dat er onopgeslagen wijzigingen zijn hoor je op het scherm zelf al te tonen en niet via een pop-up af te willen vangen. Op het moment dat een gebruiker beslist weg te willen moet je daar niet voor gaan liggen. Als je daar namelijk voor gaat liggen impliceert dat ook dat je geen rekening houdt met gebruikers die hun browser helemaal afsluiten, het tabblad dicht gooien, het proces killen, etc.
een new window is idd overkill. ik bedoel te zeggen dat er wel eens ooit redenen om een melding te gooien op een onunload. ik gebruik daar gewoon een modal dialog voor. maar ok, ontopic!

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • Thomzh
  • Registratie: Oktober 2007
  • Laatst online: 17-11-2024
iH8 schreef op woensdag 31 maart 2010 @ 19:44:
[...]


een new window is idd overkill. ik bedoel te zeggen dat er wel eens ooit redenen om een melding te gooien op een onunload. ik gebruik daar gewoon een modal dialog voor. maar ok, ontopic!
Hiermee bracht je me op een idee :) Het is een stuk gebruiksvriendelijker om een confirm boxje te maken.

de functie zou er dan toch zo uit moeten zien:
code:
1
2
3
4
5
6
7
8
9
function LeaveSite() {
    if(weggaan == 1) {
        if(confirm(\'De pagina verlaten?\'))
            window.open("http://websiteadres.tld",
"_self","menubar=1,resizable=1,width=700,height=200");
    
        
     }
}


Op een of andere manier verschijnt de confirm wel, maar het maakt niet uit of ik nu op OK of annuleren druk. Hij gaat gewoon verder met het laden van de andere pagina (of het sluiten van de browser).

Wat doe ik nu weer fout? :|

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 11:12
Je zegt niet dat hij moet stoppen deze handeling uit te voeren, dus logisch dat hij doorgaat. Verder zijn die escape slashes niet nodig.

Tip: event.preventDefault(); en voor meer informatie zie deze post: http://www.openjs.com/scripts/events/exit_confirmation.php

Daar wordt het antwoord al gegeven. :)

Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 18-09 15:56

pieturp

gaffa!

onunload kan alleen naar een functie verwijzen die een string returned. Als deze wordt gegeven zal de browser 'm tonen in een dialog, zo niet ga je direct door naar een andere pagina. Je kunt wel proberen om dan een window te openen, maar je oude pagina is weg...

Je kunt overigens ook niet zomaar JS in een link zetten. Dat moet je voorafgaan met het "javascript:" pseudo protocol, net als dat je "mailto:" gebruikt voor email adressen.

@hierboven: de manier die openjs.com gebruikt kende ik niet. Vind de mijne eenvoudiger ;)
JavaScript:
1
2
3
window.onbeforeunload=function(){
    return 'Weet je zeker dat...';
}

[ Voor 32% gewijzigd door pieturp op 31-03-2010 21:32 ]

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 21:04
iH8 schreef op woensdag 31 maart 2010 @ 19:44:
[...]


een new window is idd overkill. ik bedoel te zeggen dat er wel eens ooit redenen om een melding te gooien op een onunload. ik gebruik daar gewoon een modal dialog voor. maar ok, ontopic!
Dan sla je die wijzigingen op tijdens onunload. Een message tonen is overbodig en irritant.

Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 18-09 15:56

pieturp

gaffa!

Kiphaas7 schreef op woensdag 31 maart 2010 @ 21:32:
[...]


Dan sla je die wijzigingen op tijdens onunload. Een message tonen is overbodig en irritant.
Ben ik 't niet perse mee eens. Kijk 'ns naar gmail, doet 't ook, en dat is gewoon verrekte handig. Soms vergeet je dat je een tabje open had met unsaved data. 't Is dan niet altijd mogelijk om te weten wat de gebruiker wil; wordt 't een save of discarden we de boel? ;)
Daarnaast kun je geen asynchrone communicatie (XHR) doen in een onbeforeunload. Een simpele post heb ik nooit geprobeerd, maar kan me voorstellen dat dat ook op niks uitloopt...

[ Voor 15% gewijzigd door pieturp op 31-03-2010 21:46 ]

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • iH8
  • Registratie: December 2001
  • Laatst online: 17-06-2024

iH8

Kiphaas7 schreef op woensdag 31 maart 2010 @ 21:32:
[...]


Dan sla je die wijzigingen op tijdens onunload. Een message tonen is overbodig en irritant.
En wat dan als ik een upload of een ander langdradig proces heb gestart? ;) Als de topicstarter een dialoog wil gooien op onunload dan doe je dat over het algemeen niet met een new window. Een js confirm leent zich daar uitstekend voor.

Aunt bunny is coming to get me!


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
Als je applicatie afhankelijk is van dat soort dingen dan heb je niet begrepen dat je met stateless tech bezig bent en is je applicatie fout ontworpen.

Zorg gewoon dat je op de achtergrond de wijzigingen continu opslaat.

[ Voor 19% gewijzigd door Bosmonster op 01-04-2010 10:26 ]


Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 18-09 15:56

pieturp

gaffa!

Bosmonster schreef op donderdag 01 april 2010 @ 10:25:
Als je applicatie afhankelijk is van dat soort dingen dan heb je niet begrepen dat je met stateless tech bezig bent en is je applicatie fout ontworpen.

Zorg gewoon dat je op de achtergrond de wijzigingen continu opslaat.
En als je dat op dat moment aan 't doen bent? Grote file-upload bijvoorbeeld? Moet je dan maar gewoon 't venster sluiten :?

... en etcetera en zo


Acties:
  • 0 Henk 'm!

  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 21:04
pieturp schreef op woensdag 31 maart 2010 @ 21:44:
[...]


Ben ik 't niet perse mee eens. Kijk 'ns naar gmail, doet 't ook, en dat is gewoon verrekte handig. Soms vergeet je dat je een tabje open had met unsaved data. 't Is dan niet altijd mogelijk om te weten wat de gebruiker wil; wordt 't een save of discarden we de boel? ;)
Daarnaast kun je geen asynchrone communicatie (XHR) doen in een onbeforeunload. Een simpele post heb ik nooit geprobeerd, maar kan me voorstellen dat dat ook op niks uitloopt...
Juist gmail slaat je concept berichten automatisch op (wat dus mijn standpunt is), alhoewel ze het in andere gedeeltes juist niet doen en met alerts/modals komen (wat ik ook onbegrijpelijk vind).
pieturp schreef op donderdag 01 april 2010 @ 10:46:
[...]


En als je dat op dat moment aan 't doen bent? Grote file-upload bijvoorbeeld? Moet je dan maar gewoon 't venster sluiten :?
Ja? De user zal toch vast en zeker weten wat hij/zij doet, ZEKER bij een grote file upload? Tel eens de keren dat je bewust een tabblad sluit, en de keren dat je per ongeluk een tabblad sluit? Ik ga ervan uit dat bij een normaal mens het laatste getal vele malen lager ligt, en jij wil een (irritante, want in het overgrote deel van de keren overbodige) alert/modal laten zien _just in case_?

Het ongemak van die enkele keer per ongeluk je tabblad sluiten (wat je eigen schuld is), ten opzichte van een ongevraagde alert/modal iedere keer dat ik op die site een tabblad bewust wil sluiten, is imho lager.

[ Voor 36% gewijzigd door Kiphaas7 op 01-04-2010 11:47 ]


Acties:
  • 0 Henk 'm!

  • Thomzh
  • Registratie: Oktober 2007
  • Laatst online: 17-11-2024
Manuel schreef op woensdag 31 maart 2010 @ 21:18:
Je zegt niet dat hij moet stoppen deze handeling uit te voeren, dus logisch dat hij doorgaat. Verder zijn die escape slashes niet nodig.

Tip: event.preventDefault(); en voor meer informatie zie deze post: http://www.openjs.com/scripts/events/exit_confirmation.php

Daar wordt het antwoord al gegeven. :)
Eén van de weinige nuttige berichten in dit topic :) Hartelijk dank, ik ben een stuk verder.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
pieturp schreef op donderdag 01 april 2010 @ 10:46:
[...]

En als je dat op dat moment aan 't doen bent? Grote file-upload bijvoorbeeld? Moet je dan maar gewoon 't venster sluiten :?
Dan zet je een melding bij het uploaden dat ie "Bezig is met uploaden en dat je het venster niet moet sluiten voordat ie klaar is" bijvoorbeeld. Als mensen dan alsnog sluiten kun je ervanuitgaan dat dat opzettelijk zo bedoeld is.

Dat is een informatieve oplossing ipv een obtrusieve.

Daarnaast kan ik me voorstellen dat veel browsers en software vandaag de dag dit soort onunload meldingen blocken ivm het vele misbruik ervan.

[ Voor 17% gewijzigd door Bosmonster op 01-04-2010 18:04 ]


Acties:
  • 0 Henk 'm!

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 18-09 12:01
Zo'n beforeunload berichtje kan wel degelijk nuttig zijn, het is gewoon een extra bevestiging die mensen moeten geven voordat ze (wellicht) per ongeluk een venster sluiten.

Acties:
  • 0 Henk 'm!

  • Kiphaas7
  • Registratie: Februari 2005
  • Laatst online: 21:04
McVirusS schreef op donderdag 01 april 2010 @ 18:12:
Zo'n beforeunload berichtje kan wel degelijk nuttig zijn, het is gewoon een extra bevestiging die mensen moeten geven voordat ze (wellicht) per ongeluk een venster sluiten.
We blijven zo rondjes draaien. Ik blijf erbij dat die extra bevestiging irritant is en niet nuttig (om redenen die ik al eerder heb gegeven).

Overigens, onbeforeunload, beforeunload of unload, is dat wel crossbrowser?

Acties:
  • 0 Henk 'm!

  • pieturp
  • Registratie: April 2004
  • Laatst online: 18-09 15:56

pieturp

gaffa!

Goed, kiphaas && bosmonster: laten we dan een cookie zetten voor de doorgewinterde gebruiker die 't irritant vindt, en voor de doorsnee user geven we default een "confirm" waarschuwing. Zo blij?

Als we dan toch al een -wat ingewikkelder- app aan 't bouwen zijn, in plaats van 't doorsnee blog, bouwen we nu gelijk een compleet "configuratie-scherm" met alle opties die werkelijk íédéréén mogelijkerwijs ooit nodig zal gaan hebben, of nu al nodig had |:(

Dan hoop ik niet dat ik mijn users afschrik met een, default strengere, maar aanpasbare interface, dan jullie met jullie "had je maar moeten lezen! RTFM!" mentaliteit. :|

't Feit blijft, dat er in sommige situaties, gewoon data gesaved, danwel discarded moet worden. Aan de user dan toch de keuze?

... en etcetera en zo

Pagina: 1