Popup blockerare och javascript
Förord
Användningen av popup blockerare blir allt vanligare, och dessa ställer till med vissa problem, speciellt i samband med dåligt kodad javascript. Detta diskuteras i denna artikel.Innehåll
»»
»
Popup blockerare och javascript
Allt fler använder popup blockerare
I och med den nya service pack 2 för windows xp, samt den ökade användningen av andra browsers än Internet Explorer (t.ex. Mozilla Firefox), så är det allt fler som använder nån form av popup blockerare. Detta kan ställa till problem om man behöver använda popup fönster i sin webbdesign.
Problemet
Dom flesta popup blockerare blockerar alla fönster som öppnas automatiskt, dvs via onload event eller liknande, däremot tillåts (ofta) fönster som öppnas via t.ex. onclick.Alltför ofta ser man kod i stil med följande:
function doStuffWithNewWindow() {
var newwin = window.open("url", "_blank", "width=100, height");
//fel
var el = newwin.document.getElementById("foo");
}
Ifall popup fönstret blockerats här så kommer newwin att vara null, och användaren välkomnas med ett "Error occured in script, do you want to debug?" meddelande, vilket vi inte är vad vi vill.
Meningen med popup blockerare är ju att hindra automatiskt öppnande fönster, och detta är svårt att komma runt om man verkligen vill öppna ett fönster helt automatiskt. Detta kan dock oftast lösas med att kräva en explicit knapptryckning.
Lösningen?
För att hindra att våra användare får en massa script fel som beror på att dom använder popup blockerare (samt att vi kodat slarvigt), så kan (och bör) vi kolla att öppnandet av vårt fönster verkligen lyckades, och lyckas det inte kan vi meddela användaren att han antagligen använder popup blocker.
function doStuffWithNewWindow() {
var newwin = window.open("url", "_blank", "width=100, height=100");
if (!newwin) {
alert("Kunde inte öppna ett nytt fönster, använder du popup blocker?");
return;
}
var el = newwin.document.getElementById("foo");
...
Nu kan vi i alla fall relativt graciöst hantera att våra popups blir blockerade och meddela användaren om detta. Hoppas detta hjälpte någon.
Som vanligt mottas kommentarer och tips gärna.
Pelle Johansson
Jag har dock letat och funderat på om man inte kan skriva ett script som gör kontrollen utan att behöva göra ett popup-fönster. Finns det inga sådana program? Anledningen till detta kan vara många, exempelvis att man vill informera om att det förekommer popup - istället för att meddela att popup misslyckades.
Simon Dahlbacka
Pelle: tack för feedbacken, och tyvärr tror jag inte att det (åtminstone på nåt standardiserat sätt) är möjligt.