Foto af Jesper Tverskov

Klapmusen.dk

 Jesper Tverskov, 31. august 2003

Påtving ikke brugeren nyt vindue

Et website bør aldrig påtvinge en bruger nye vinduer. Hvis der skal dispenseres fra reglen, bør attributten target="_blank" anvendes. JavaScript's window.open medsender ikke referenten.

  1. Brugeren skal selv åbne vinduer
  2. Det er brugerens browser
  3. Nyt vindue ødelægger historikken
  4. Nyt vindue er sjældent som brugeren ønsker
  5. Software der forhindrer nyt vindue
  6. Nyt vindue og Best Practice
  7. Nyt vindue som undtagelse fra reglen
  8. Nyt vindue lavet med JavaScript
  9. JavaScript medsender ikke referenten
  10. Nyt vindue lavet med HTML
  11. TARGET er "deprecated"
  12. TARGET lavet med JavaScript
  13. Konklusion

Mange webdesignere finder det naturligt, at nogle link åbner websider i et nyt vindue. Det gælder først og fremmest eksterne link. Det betragtes endog som brugervenligt, fordi det er en intuitiv måde at markere, at ét website forlades til fordel for et andet.

Det er også naturligt, at visse interne link åbner som nyt vindue, der endog med fordel kan reduceres til blot at være en ramme uden browserens menulinje, adresselinje, osv. Det kan være en ordbog, en hjælpefunktion, indtastningsformular, "udskriftsvenlig"-version, "tip en ven med email", osv.

1.  Brugeren skal selv åbne vinduer

Det påstås ofte, at nye vinduer er "skidt for dårlige brugere" og "godt for gode brugere", og at der hersker et skisma mellem sund fornuft, der accepterer nye vinduer som en selvfølge, og eksperter i brugervenlighed, der som regel synes, at nye vinduer er noget bras. Det er forenklet og misvisende analyse.

Det handler om noget helt andet. Det handler om, hvem der skal åbne vinduer. Er det brugeren eller forfatteren af en webside. Der er fire væsentlige argumenter imod at påtvinge brugeren nye vinduer:

  • Det er brugerens browser
  • Nyt vindue ødelægger historikken
  • Nyt vindue er sjældent som brugeren ønsker
  • Nogle brugere har valgt at slå nyt vindue fra

2.  Det er brugerens browser

Det første argument lyder, at nye vinduer er gode nok, men at det er op til brugeren at bestemme, hvornår der skal åbnes nye vinduer. Det er vigtigt at gøre sig klart, hvad et nyt vindue er. Et nyt vindue er et nyt tilfælde af min browser på min computer.

Den linde strøm af nye vinduer, der åbner hér, dér og alle vegne, har sin pris. Mange brugere påtvinges en relativ passiv modtagerrolle ikke ulig sofaen foran tv. De fleste brugere kan i dag ikke drømme om selv at åbne et nyt tilfælde af deres browser.

Lad os tage den mest udbredte browser, Internet Explorer, som eksempel. Hvis jeg ønsker, at et link skal åbne i et nyt vindue, er det blot at trykke Shift-tasten ned, når jeg aktiverer linket med mus eller tastatur. Jeg kan også højreklikke på linket og vælge at linket skal åbne i nyt vindue.

Hvis en webside åbner i samme vindue, og brugeren vurderer, at det burde være åbnet i et nyt vindue, er det i IE blot at trykke Ctrl+N , og et nyt vindue åbner med den pågældende webside indlæst. Det er faktisk den mest fornuftige metode, fordi historikken overføres til det ny vindue.

Der er vigtigt at understrege, at ingen ekspert i brugervenlighed er modstander af nye vinduer. Det er udelukkende et spørgsmål om magten på nettet. Hvilken model ønsker vi for World Wide Web. Skal modellen være en relativ passiv forbruger, der påtvinges nye vinduer i én uendelighed. Eller ønsker vi en mere ambitiøs model, hvor brugeren er den udfarende kraft.

3.  Nyt vindue ødelægger historikken

Når nye vinduer påtvinges brugeren, brydes historikken, der nulstilles i det ny vindue. Mange brugere oplever derfor, at Alt+VenstrePil og Alt+HøjrePil, dvs. tilbage og frem i historikken i browsere som f.eks. Internet Explorer, Mozilla og Opera, næsten aldrig virker som forventet.

Uskikken med at påtvinge brugeren nye vinduer har stærkt bidraget til, at intelligent navigation stort set er ukendt for mange brugere. Det er synd. Historikken er genial, fordi den betyder lynhurtig navigation mellem cachede websider, der er downloaded til brugerens computer.

Historikken går også tabt i de fleste browsere, når brugeren selv åbner nye vinduer ved at højreklikke på linket eller ved at trykke på Shift-tasten i f.eks. Internet Explorer. Andre browsere har tilsvarende metoder. Derimod bevares historikken i det ny vindue, hvis brugeren trykker Ctrl+N i IE, efter at websiden er indlæst i samme vindue.

4.  Nyt vindue er sjældent som brugeren ønsker

Påtvungne nye vinduer har sjældent de dimensioner og den position på skærmen, som brugeren ønsker. Det ny vindue er typisk for lille. De fleste websider forudsætter et maksimeret eller et næsten maksimeret browservindue for at blive vist tilfredsstillende uden grim ombrydning eller scrollepanel på tværs.

Påtvungne nye vinduer kræver, at brugeren bevidst eller ubevidst spilder tid med at forholde sig til, hvordan det nye vindue relaterer sig til det gamle. Hvad betyder det ny vindue for historikken. Brugeren skal spilde tid med at resize, positionere, maksimere eller at lukke det ny vindue.

Alt dette kunne være undgået ved at lade brugere forsætte med at surfe i det samme vindue. Brugeren bør kun spilde tid på et nyt vindue, når brugeren selv mener, det er en god idé i en given situation og selv aktivt vælger et nyt vindue.

5.  Software der forhindrer nyt vindue

Den ekstreme udgave af nye vinduer hedder reklamer, der ofte åbner automatisk og i baggrunden. Først når brugeren begynder at lukke alle de vinduer, der efterhånden blokerer for at bruge computeren til noget fornuftigt, kommer reklamerne frem.

Nogle website anvender endog "pop-up"-vinduer som rent bondefangeri. Vinduerne bliver ved med at åbne, når du forsøger at lukke dem. Jo mere du klikker for at lukke, jo flere vinduer åbner.

Påtvungne vinduer i form af reklamer og bondefangeri, hvor der er tale om at genere brugerne på linje med spam og computer-virus, er så ødelæggende specielt for begyndere og for mindre erfarne, at det har kaldt mange op på barrikaderne til aktiv modstand.

Nogle brugere har downloadet og installeret software, der forhindrer pop-up vinduer, dvs. nye vinduer, som brugeren ikke selv aktivt har valgt. Der er også browsere som Opera, der har sådan software indbygget som valgmulighed.

Software, der forhindrer påtvungne vinduer, kan anvendes på flere måder. Muligheden for nye vinduer kan slås helt fra, så link, der åbner nye vinduer, ikke længere fungerer. Linket er dødt. Denne type software kan også sættes op til kun at acceptere nye vinduer, når brugeren har klikket på et regulært link.

Software, der forsvarer brugeren mod påtvungne nye vinduer, kan altså være sat op til også at neutralisere normale link, der blot åbner en webside i et nyt vindue. Et website, der åbner link i nye vinduer, risikerer altså at miste marginale brugere, der forlader websitet, fordi mange link er døde.

6.  Nyt vindue og Best Practice

Et godt website med eget "look and feel" og med en gennemtænkt informationsarkitektur har ikke behov for, at eksterne link åbner i et nyt vindue for at advare brugerne om, at der er skiftet website. Hvis eksterne og interne link ikke kan holdes adskildt, kan de eksterne evt. markeres i tooltip til linket og med en anmærkning ved linktektsten. Vi klarer også udmærket at zappe rundt på tv i samme vindue.

Fantasifuld brug af nye vinduer internt på et website, hvor brugerens browser ribbes for menulinje, osv. for blot at stå tilbage som en ramme, strider imod alle tommelfingerregler for sundt og solidt webdesign.

Sådan "client-side"-orienteret webdesign sætter sin lid til diverse browseres varierende eller manglende understøttelse af JavaScript. Det er principielt et skråplan, der altid bør undgås, hvis det samme behov kan dækkes med teknologi på "server-side". Brug af nye vinduer til design-formål begrænser altid fleksibilitet og anvendelighed, gør websiderne mindre tilgængelige og mindre brugervenlige for i hver fald nogle brugere.

I stedet for nye vinduer som internt design, bør du, når det er muligt, åbne og lukke nye områder på websiden. Det vil sige: integrere "vinduet" på siden. Der er i dag gode muligheder til rådighed med JavaScript og W3C DOM, hvis det absolut skal ske "client-side".

7.  Nyt vindue som undtagelse fra reglen

Det er i dag skik og brug at påtvinge brugeren nye vinduer. Derfor kan der opstå situationer, hvor du ikke lige sådan kan lave et websites indgroede praksis om, men er tvunget til at videreføre Bad Practice.

Det kan også være svært at overbevise andre om, at nye vinduer er noget juks. Så melder spørgsmålet sig: hvordan påtvinger vi brugeren nye vinduer på den mest skånsomme måde, dvs. uden at ødelægge for meget.

8.  Nyt vindue lavet med JavaScript

Nye vinduer lavet med JavaScript har kun én fordel: du kan påtvinge brugeren vinduer med en bestemt størrelse og placering på skærmen. Men nye vinduer lavet med JavaScript er langt mere problematiske end vinduer lavet med attributten TARGET. JavaScript ser ofte ud til at virke, men kan føre til fejlmeldinger på brugerens skærm i situationer, du ikke har tænkt på.

Lad os tage en typisk fejlagtig måde at anvende JavaScript som eksempel. Det er meget almindeligt at lave nye vinduer ved at indsætte kald af en funktion som værdi for "href"-attributten i ankeret, f.eks. således:

<a href="Javascript:MinFunction()">Mit link</a>

"Min function()" kalder et JavaScript, der anvender "window.open". Hvis brugeren i en sådan situation selv forsøger at åbne linket ved at højreklikke og vælge "nyt vindue" eller ved i Internet Explorer at trykke Shift, når linket aktiveres, kommer der fejlmeldinger i de browsere, jeg har testet, eller skærmen går i sort.

Det andet problem ved ovenstående JavaScript er, at brugere, der anvender browsere, der ikke understøtter JavaScript, f.eks. tekstbrowsere, slet ikke kan aktivere linket. Lad gå at JavaScript anvendes til noget mindre vigtigt, som nogle få brugere kan tåle at gå glip af. Men det er "very bad practice" at udelukke hele brugergrupper fra at kunne bruge et website, blot fordi du ikke gider kode ordentligt.

Skal JavaScript undtagelsesvis anvendes til at åbne nye vinduer, skal det gøres således (vinduets navn, placering og størrelse er blot et eksempel):

<a href="http://www.klapmusen.dk/indhold" onclick="window.open(this.href, 'indhold', 'left=10, top=10, height=400, width=800, menubar=1, location=1, toolbar=1, scrollbars=1, status=1, resizable=1'); return false;" target="_blank" >Indhold</a>

Bemærk at ovenstående kode både indeholder et ganske normalt link med href="http://www.klapmusen.dk/indhold", der er Klapmusens indholdsfortegnelse, og et JavaScript med "this.href", der henviser til linkets href.

Det betyder, at linket aktiveres normelt og åbner et nyt vindue ved hjælp af target="_blank". Hvis browseren forstår JavaScript, tager JavaScriptet over før vinduet åbner og annullerer det. Det sker med koden "return false". JavaScriptet åbner derefter ved hjælp af "this.href" linket i et nyt vindue defineret med JavaScript.

Det er vigtigt nøje at specificere alt det, der skal være med i browseren. Det ny vindue er jo et nyt tilfælde af brugerens browser. Det meste er nødt til at være slået til, så alle brugere uden videre kan finde ud af at surfe videre!

9.  JavaScript medsender ikke referenten

Selv når koden til at åbne nye vinduer med JavaScript er lavet rigtigt, lider nye vinduer lavet med JavaScript af en skavank, der gør dem problematiske for seriøse programmører. Link der åbner nye vinduer lavet med JavaScript medsender ikke referenten. Det gør derimod nye vinduer lavet med target="_blank".

Et normalt link, der sender en forespørgsel til en webserver om at vise en ny webside i brugerens browser, identificerer sig selv, både med domænenavn (f.eks. www.klapmusen.dk) og som webside, f.eks. "/minside.html".

Referenten er altså adressen på den webside, der indeholdt et link, der bad om at få lov til at se en ny webside. Referenten medsendes ikke som HTTP-header til webserveren, hvis linket indlæser websiden i et nyt vindue, der er lavet med JavaScript.

Oplysning om referenten er forudsætning for avanceret statistik og trafikanalyse, der kan danne grundlag for en bedre informationsarkitektur til glæde for brugerne. Det gælder først og fremmest internt på et website, hvor interne sider, der åbner i nye vinduer, ikke med enkle metoder kan levere avanceret input til statistik og trafikanalyse.

Referenten er også vigtig for eksterne link. Det kan være meget nyttigt for det andet website at følge med i hvorfra en bruger ankommer. Hvilke website har websider, der linker til vore websider, og hvor mange bruger ankommer fra disse websider hvornår, osv. Er der evt. linket med forkert adresse, der forårsager 404-fejl på vort website? Vi kan melde tilbage, hvis vi kender referenten.

10.  Nyt vindue lavet med HTML

Oprindeligt kunne du ikke åbne nye vinduer med HTML. Det blev gjort mulig, da browseren Netscape midt i 1990'erne introducerede FRAMES, der er en teknik, der kan indlæse flere HTML-dokumenter i rammer på én webside. Den samme teknik gjorde det også muligt at åbne en webside i et nyt vindue uden at anvende FRAMES. Det er blot i anker-taggen at indsætte attributten target="_blank".

Nyt vindue lavet med target="_blank" har to fordele i forhold til vinduer lavet med JavaScript. For det første åbner vinduet præcist som sidste ikke maksimerede vindue i brugerens browser. Dette vindue vil ofte være netop, som brugeren ønsker det. Det har jo den størrelse og placering, som brugeren sidst anvendte. Det er dog ofte alligevel ikke tilfældet, fordi brugeren måske maksimerede det sidste vindue, fordi det var ubrugeligt.

Med JavaScript får alle brugere, det samme vindue, der er angivet med position og størrelse i koden. Dette vindue kan være langt fra den enkelte brugers behov, hvis brugeren surfer i et reduceret vindue eller med ekstrem høj eller lav opløsning. Den anden fordel ved target="_blank" er, at metoden, i modsætning til JavaScript, medsender referenten som HTTP-header.

Website lavet med FRAMES blev for en stund betragtet som smarte og bredte sig som en flodbølge understøttet af de fleste browsere. W3C, der styrer mange af standarderne for nettet, blev meget mod sin vilje presset til at tage teknikken til sig, men i arms længde.

FRAMES, der heldigvis er kraftigt på retur på grund af problemer med brugervenlighed og tilgængelighed, er ødelæggende for de grundlæggende principper for WWW, der har dokumentet som udgangspunkt og en intention om at nettet skal være for alle. W3C fandt derfor på at lave tre DTD'er (document type definition) til HTML 4, der blev videreført i XHTML: "Transitionel", "Frames" og "Strict".

"Transitionel" og "Frames" er de bløde specifikationer, hvor kravene til adskillelse af præsentation (CSS) og opmærkning (HTML/XHTML) er små, og hvor opmærkning stemplet som forældet ("deprecated") , stadig er tilladt. Den "stricte" DTD er den fremadrettede, hvor opmærkning og præsentation er helt adskilt, og hvor "deprecated" opmærkning ikke er tilladt.

11.  TARGET er "deprecated"

I de "stricte" udgaver af HTML og XHTML er frames ikke tilladt, dvs. den opmærkning, der gør frames mulig, eksister ikke i DTD'en. Det samme gælder attributten "target", der oprindeligt kom med på grund af FRAMES. Da W3C strammede XHTML yderligere op, for at den for alvor kunne anvendes som en XML-applikation, blev DTD'erne for "Transitionel" og "Frames" droppet. XHTML 1.1 findes kun som "strict". Derfor er betegnelsen "strict" ikke længere relevant.

Hvis du vil bruge de "stricte" DTD'er for HTML 4 eller XHTML 1.0, eller XHTML 1.1, så er det ikke muligt at anvende attributten "target" til at åbne nye vinduer. Attributten "target" eksister ikke i DTD'en.

Det er heller ikke muligt at åbne nye vinduer med CSS. Det betyder, at du ikke kan åbne nye vinduer med opmærkning direkte, hvis du samtidigt ønsker, at dine websider skal validere mod de mest krævende DTD'er.

12.  TARGET lavet med JavaScript

I betragtning af at det er almindeligt at påtvinge brugere nye vinduer, er der selvfølgelig programmører [1], der har fundet på metoder, så det alligevel er muligt at anvende attributten TARGET, uden at det går ud over dokumentets validering.

Ideen er i stedet at anvende en anden attribut i DTD'en, en attribut der tillader værdier, der er defineret af forfatteren. Den mest logiske attribut at anvende i stedet for "target" er "rel", der står for relation. Attributten bruges ikke til så meget i dag, dvs.: der er ikke mange browsere, der understøtter de værdier, der nævnes i DTD'en som eksempler, f.eks. "start", "contents", "previous" og "next". Fordelen ved attributten "rel" er, at værdierne i DTD'en kun er eksempler. Det er tilladt at lave dine egne værdier.

Skal vi være velopdragne, er det blot at opfinde nogle meningsfulde værdier, der udtrykker relationer. Det kunne være rel="external", der kunne udtrykke, at en webside er ekstern, eller det kunne være rel="subpage" eller rel="note", der kunne betyde, at websiden forholder sig underordnet i forhold til den webside, der indeholder et link til siden.

Nu er det blot at bruge JavaScripts' anker-objekt og "W3C DOM" til at indsætte attributten target='_blank' i de relevante ankre, efter at websiderne er loadet i brugerens browser.

Ovenstående trick accepteres selvfølgelig af W3C's validator, der kun sammenholder opmærkningen med den DTD, der er angivet. Da dokumentet ikke indeholder "target" men i stedet attributten "rel", der er med i DTD'en, validerer dokumentet.

Der er tale om et acceptabelt trick. Validering tager jo aldrig JavaScript i betragtning. Validering interesserer sig heller ikke for, om du åbner nye vinduer med metoden "window.open" i JavaScript, eller for hvordan du i øvrigt manipulerer dokumentets opmærkning og CSS efter at dokumentet er loadet i browseren.

Her er et eksempel på et JavaScript, der indsætter target="_blank" i alle link, der indeholder rel='external':

function linksExternal()
{
if (document.getElementsByTagName)
{
var anchors = document.getElementsByTagName("a");
for (var i=0; i<anchors.length; i++)
{
var anchor = anchors[i];
if (anchor.getAttribute("rel") == "external")
{
anchor.target = "_blank";
}
}
}
}

Bemærk at ovenstående JavaScript kun virker i moderne browsere, der understøtter "W3C DOM"-objektet getElementsByTagName. Hvis objektet ikke understøttes, eller hvis browseren ikke forstår JavaScript, virker linkene med rel="external" normalt og åbner i samme vindue.

13.  Konklusion

Påtvungne nye vinduer har helt sikkert taget overhånd på nettet som en uskik, der ødelægger langt mere for de fleste brugere end de undtagelsesvis gavner nogle få. Lad os få vendt denne udvikling. Det betyder ikke, at vi skal være modstandere af at påtvinge brugere nye vinduer i enhver situation. Der er helt sikkert undtagelser, hvor det kan forsvares.

Alle eksterne link på Klapmusen.dk åbner i samme vindue som mit eget websites sider. Det er faktisk en stor lise, at eksterne link åbner i samme vindue. Det er befriende ikke at skulle resize, flytte vinduer, maksimere og lukke. Det er dejligt for alvor at kunne navigere ved hjælp af den lynhurtige historik i browseren. Jeg snakker ikke nødvendigvis om den lille historik i forbindelse med knappen "Tilbage" i browseren, Backspace og Alt+Venstrepil men om Ctrl+H.

Noter

[1]
New-Window Links in a Standards-Compliant World, Kevin Yank, 2003.

Copyright © 2003 Klapmusen.dk

N

The document is made to be a resource. Use it. Link to it. The document will be maintained, the URL is stable.

Opdateret: 03-09-2003 11:06

Status: 

Revision: 

Tip en ven - Email et link

Debat

Debatten er lukket. Send mig en mail.