Hoppa till innehållet

Webbläsare

programmet en person använder för att öppna webbsidor

Vad det är

En webbläsare är programmet som tar emot en adress, hämtar det servern skickar tillbaka och gör om det till en sida som någon kan läsa, scrolla i och klicka på. Många utvecklare säger browser, och i vardagligt tal räcker det med webbläsaren. Chrome, Safari, Firefox och Edge är namnen på ikonerna, men under dem finns betydligt färre program än namnen låter ana.

I HTML-standarden står ordet browser sällan. Där heter det user agent, programvaran som agerar för läsarens räkning, och större delen av texten är en förteckning över vad en user agent ska göra med en sida. Tre av de skyldigheterna förklarar det mesta av vad en webbläsare finns till för.

Den första är att tolka märkningen. Standarden ger regler för hur HTML-dokument ska tolkas oavsett om de är syntaktiskt korrekta eller inte, så en sluttagg som saknas eller ett element på fel plats stoppar inte sidan. Varje webbläsare som följer standarden lagar samma trasiga märkning till samma träd av element. Därför visas en slarvig sida ändå, och därför kan felen i den ligga obemärkta i flera år.

Den andra är händelseloopen. Klick, tangenttryck, timrar, svar från nätverket, skript och uppritningen av nästa bildruta ställer sig i kö och turas om. Ett skript som håller loopen i två sekunder håller samtidigt upp klick, inmatning och nästa uppritning, och det är just det någon menar när de säger att sidan har hängt sig.

Den tredje är att hålla webbplatser isär. Standarden definierar ett ursprung (origin) som ett schema, en värd och en port, och en site som schemat plus den registrerbara delen av domännamnet. Ett skript från ett ursprung som sträcker sig in i dokumentet från ett annat får ett säkerhetsfel tillbaka, inte innehållet. Det mesta av det som skyddar fliken med banken från fliken med nyheter är den regeln, och webbläsaren upprätthåller den vid varje åtkomst.

Delen som utför arbetet kallas motorn. De flesta webbläsare som används i dag bygger på en av tre: Blink i Chrome, Edge och en lång rad andra, WebKit i Safari och Gecko i Firefox. Ett nytt webbläsarnamn betyder oftast ett nytt skal kring en av dem, med eget adressfält, egna inställningar och egen synkronisering, men med samma regler för hur en sida läses och ritas.

Två grannar blandas ofta ihop med webbläsaren. En sökmotor är en webbplats som webbläsaren öppnar när adressfältet får ord i stället för en adress. En webview är en webbläsarmotor som byggts in i en annan app, med adressfältet och de flesta kontrollerna bortplockade. Testverktygen lägger till en tredje, den huvudlösa webbläsaren (headless), som ritar sidor som ingen tittar på så att ett skript kan kontrollera dem.

Varför det spelar roll

En server kan skicka exakt rätt byte och läsaren ändå få en oläslig sida, eftersom det en person ser är vad webbläsaren gjorde av de byten, med personens egna inställningar ovanpå. Det är i webbläsaren som arbetet bedöms, och det får fyra följder för hur du bygger och testar.

Testa motorer, inte varumärken. En testplan med fyra webbläsarnamn kan mycket väl täcka två motorer två gånger och missa den tredje helt. Den lista som är till nytta namnger motorerna, och därtill de plattformar där samma motor beter sig annorlunda: en telefon med liten skärm och pekinmatning, eller en utskriftsdialog.

Läsarens inställningar hör till sidan. En webbläsare bär med sig ett önskat färgschema, en begäran om minskad rörelse, en zoomnivå, en standardstorlek för text och ibland ett översättningslager ovanpå allt. En sida som struntar i det är gjord för en enda konfiguration hos en enda person, och oftast är det personen som byggde den.

Funktioner efterfrågas, de antas inte. Motorerna får ny CSS och nya gränssnitt vid olika tidpunkter. En sida som behöver något som bara vissa motorer klarar kan fråga motorn direkt: CSS har @supports, och ett skript kan testa om en egenskap finns innan det använder den. User agent-strängen är en dålig ersättning, eftersom webbläsarna länge har formulerat den delvis för att likna varandra, så att äldre kod som sniffar efter namn skulle släppa in dem.

Regler i webbläsaren är en artighet. Validering av formulär, en inaktiverad kontroll och en dold länk körs alla i ett program som läsaren äger och kan ändra. De gör den ärliga vägen lättare att gå, men de stoppar ingen som öppnar utvecklarverktygen eller hoppar över sidan helt. Allt som skyddar pengar, data eller åtkomst kontrolleras därför en gång till på servern.

Så ser det ut i praktiken

Den här webbplatsen stryker under sina länkar med skip-ink, inställningen som bryter linjen där den annars skulle korsa en nedstapel. I Chromium såg luckorna rätt ut. Uppmätta i en riktig Safari i åtta gångers förstoring var de ungefär sex gånger smalare, och orsaken visade sig vara en defekt i WebKit: ett enda snitt som deklarerade ett icke-latinskt teckenintervall försämrade skip-ink för hela familjen. Lösningen blev ett omdöpt familjenamn i typsnittsstacken. Redogörelsen för understrykningen i Safari och typsnittsdelmängden bakom den slutar i den lärdom som den här artikeln hellre sätter först: en skip-ink-mätning är bara sann för den motor som gjorde den. Tabellen, diagnosen och den första lösningen var alla Chromium, och skärmbilden som öppnade fallet igen kom från en människa som tittade på sidan.

Utskrift är nästa ställe där motorerna går isär. Utskriftsstilmallen på 637 rader dokumenterar fyra motorbeteenden som fällor, var och en knuten till en verklig defekt. Den första gäller viewport-enheter, som en webbläsare vid utskrift mäter mot arkets sidruta och en annan mot fönstret, och därför tappade varje rad en tredjedel när sidan skrevs ut från ett brett fönster. Element med fast position ritas ut på varje ark. Etiketter som färgats för det mörka standardtemat kom ut vitt på vitt hos läsare vars webbläsare föredrog mörkt. En flex- eller grid-ruta som paginerade medier inte kan dela gav ett tomt första ark. Kontrollen som vaktar allt detta kör sex kombinationer av papper och orientering under båda inställningarna för färgschema och räknar de faktiska sidorna, och sidan noterar fortfarande en motor som struntar i reglerna för horungar och änkor.

Det tredje fallet hittades av läsare, inte av ett test. När webbplatsen gick ut som en onion-spegel i Tor på en läsbar adress, satt de första läsarna i en annan webbläsarmotor, en som saknar den scrollstyrda animation som sidfoten byggde på, och varenda en av dem fick kolofonen målad tvärs över förstasidan. Defekten fanns lika mycket på den vanliga webbplatsen; det krävdes en publik på en annan motor för att den skulle synas.

Var det går fel

  • En sida provas i webbläsaren på utvecklarens skrivbord och förklaras klar. Varje vana hos den enda motorn blir ett dolt antagande. Botemedlet är en kort matris med en webbläsare per motor, plus en telefon, där varje rättelse mäts i alla innan den kallas klar.
  • Koden läser webbläsarens namn och gissar vad den klarar. Gissningen slår fel för varje webbläsare som lånar en annans etikett, och den åldras med varje ny version. Att fråga efter funktionen lämnar beslutet hos motorn, och regeln utanför blocket är det som alla andra motorer får, så den ska vara det säkra läget:
.footer {
    position: static;
}

@supports (animation-timeline: scroll()) {
    .footer {
        animation: settle linear both;
        animation-timeline: scroll();
    }
}
  • Element utan egen stil ärver webbläsarens standardvärden. Rubriker, marginaler och framför allt formulärkontroller kommer med varje motors inbyggda stilmall, och de stilmallarna skiljer sig åt. En design som såg färdig ut kan ha lutat sig mot en enda motors val utan att någon har fattat de besluten.
  • En regel som bara gäller i sidan behandlas som om den gällde överallt. En knapp som gråats ut av ett skript, ett fält som bara tar siffror, en länk som döljs för den som saknar abonnemang: var och en håller bara för läsare som lämnar sidan som den skickades. Servern gör om varje kontroll som spelar roll.
  • Länkar öppnas inuti någon annans app. En länk som trycks i en chatt eller ett socialt flöde hamnar ofta i en inbyggd webbläsare eller en webview, ofta med egen lagring, så den som är inloggad i sin vanliga webbläsare kommer fram som en främling. Flöden som lämnar över till en annan app eller räknar med en befintlig session behöver testas från de ingångarna också.

Läs mer

Ordlista