Does jQuery Mobile 1.4 support jQuery core 1.8 & newer?

Forstå Links i jQuery Mobile: En Komplet Guide

26/06/2022

Rating: 4.32 (16194 votes)

jQuery Mobile er et robust rammeværk designet til at forenkle udviklingen af mobilvenlige websites og webapplikationer. En af dets mest kraftfulde funktioner er den intuitive måde, det håndterer links og navigation på. I stedet for at kræve komplekse konfigurationer, bygger jQuery Mobile på standard HTML-linkkonventioner og automatiserer processen med at skabe en app-lignende oplevelse ved hjælp af Ajax. Dette betyder, at du kan opbygge dine sider med almindelige HTML-links, og rammeværket vil 'bare fungere', idet det leverer flydende overgange og hurtig indlæsning. Lad os dykke ned i de forskellige typer af links og hvordan de fungerer i dette dynamiske miljø.

What are the different types of HTML links in jQuery Mobile?
All standard HTML link types are supported in jQuery Mobile in addition to the types outlined above. Here is a sampler of many common link types: Links that will be Ajax-loaded with page transitions. Link in the same domain. Dialog link: data-rel="dialog" (not tracked in history) Links that will refresh the page.
Indholdsfortegnelse

Standard Linkadfærd: Ajax

Som standard er jQuery Mobile designet til at indlæse alle links, der peger på en ekstern side (f.eks. produkter.html), via Ajax. Denne proces kaldes ofte Hijax, fordi den ubesværet opfanger standard HTML-links og omdanner dem til Ajax-anmodninger uden at kræve særlig kode fra udvikleren. Når en bruger klikker på et sådant link, vil rammeværket automatisk parse linkets href-attribut for at formulere en Ajax-anmodning og vise en indlæsningsspinner for at indikere, at indholdet hentes.

Hvis Ajax-anmodningen lykkes, udføres en række handlinger for at sikre en problemfri overgang. Det nye sideindhold tilføjes til dokumentets DOM (Document Object Model), hvilket betyder, at det bliver en del af den aktuelle webside uden en fuld genindlæsning. Efterfølgende initialiseres alle mobile widgets automatisk på det nye indhold, og den nye side animeres ind i visningen med en sideovergang, der giver en følelse af en indbygget applikation. Dette skaber en meget mere flydende og responsiv brugeroplevelse sammenlignet med traditionelle fulde sidegenindlæsninger.

I tilfælde af at Ajax-anmodningen fejler (f.eks. på grund af netværksproblemer eller en ikke-eksisterende ressource), vil rammeværket vise en lille fejlmeddelelse som et overlay. Denne meddelelse er typisk stylet med en 'e'-farveprøve og forsvinder automatisk efter kort tid, så den ikke forstyrrer navigationsflowet unødigt. Denne automatiske fejlhåndtering bidrager til en robust og brugervenlig oplevelse.

Det er vigtigt at bemærke en begrænsning ved Ajax-navigation: Du kan ikke linke til et multi-side dokument, når Ajax-navigation er aktiv. Rammeværket vil kun indlæse den første side, det finder i dokumentet, ikke hele sættet af interne sider. I sådanne tilfælde skal du linke uden Ajax (som beskrevet i næste afsnit) for at tvinge en fuld sidegenindlæsning og forhindre potentielle hash-kollisioner, da Ajax-historikken også bruger URL-hashen. Der findes dog plugins, såsom et subpage-plugin, der kan gøre det muligt at indlæse multi-side dokumenter.

Linker Uden Ajax

Selvom Ajax-navigation er standard og foretrukket for en app-lignende oplevelse, er der situationer, hvor du ønsker at deaktivere den. Links, der peger på andre domæner, eller som har attributterne rel="external", data-ajax="false" eller target, vil ikke blive indlæst med Ajax. I stedet vil disse links forårsage en fuld sidegenindlæsning uden animeret overgang. Både rel="external" og data-ajax="false" har den samme effekt, men en forskellig semantisk betydning:

  • rel="external" bør bruges, når du linker til et andet site eller domæne.
  • data-ajax="false" er nyttig for simpelthen at fravælge en side inden for dit eget domæne fra at blive indlæst via Ajax.

På grund af sikkerhedsrestriktioner vil rammeværket altid fravælge links til eksterne domæner fra Ajax-adfærd for at forhindre potentielle XSS-angreb og andre sikkerhedsrisici, der kan opstå ved indlæsning af ukendt indhold via Ajax.

I version 1.1 introducerede jQuery Mobile understøttelse af at bruge data-ajax="false" på en overordnet container. Dette giver dig mulighed for at udelukke et stort antal links fra Ajax-navigationssystemet uden at skulle tilføje attributten til hvert enkelt link i containeren. For at aktivere denne funktionalitet skal $.mobile.ignoreContentEnabled indstilles til true. Det er vigtigt at tjekke standardkonfigurationen, før du bruger og indstiller denne mulighed.

Vigtig note: Når du bygger en jQuery Mobile-applikation, hvor Ajax-navigationssystemet er globalt deaktiveret eller ofte deaktiveret på individuelle links, anbefales det at deaktivere den globale konfigurationsmulighed $.mobile.pushStateEnabled. Dette hjælper med at undgå inkonsekvent navigationsadfærd i nogle browsere, da pushState er tæt forbundet med den måde, Ajax-navigation manipulerer browserhistorikken på.

Linker Indenfor Et Multi-side Dokument

En enkelt HTML-dokument kan indeholde en eller flere 'side'-containere ved simpelthen at stable flere div-elementer med en data-role="page"-attribut. Dette gør det muligt at bygge et lille site eller en applikation inden for et enkelt HTML-dokument. Når siden indlæses, vil jQuery Mobile simpelthen vise den første 'side', den finder i kildekoden. Dette er særligt nyttigt for små, hurtige applikationer eller sektioner med tæt forbundet indhold.

Hvis et link i et multi-side dokument peger på et anker (f.eks. #foo), vil rammeværket lede efter en side-wrapper med den pågældende ID (id="foo"). Hvis den finder en side i HTML-dokumentet, vil den overføre den nye side til visning med en animeret overgang. Du kan problemfrit navigere mellem lokale, interne 'sider' og eksterne sider i jQuery Mobile. Begge vil se ens ud for slutbrugeren, bortset fra at eksterne sider vil vise Ajax-spinneren under indlæsning. I begge situationer opdaterer jQuery Mobile sidens URL-hash for at muliggøre understøttelse af tilbage-knap, deep-linking og bogmærkning.

Det er dog afgørende at bemærke, at hvis du linker fra en mobilside, der blev indlæst via Ajax, til en side, der indeholder flere interne sider, skal du tilføje en rel="external" eller data-ajax="false" til linket. Dette fortæller rammeværket at foretage en fuld sidegenindlæsning for at rydde Ajax-hashen i URL'en. Dette er kritisk, fordi Ajax-sider bruger hashen (#) til at spore Ajax-historikken, mens flere interne sider bruger hashen til at angive interne sider, hvilket kan føre til konflikter i hashen mellem disse to tilstande. Uden denne attribut vil browserens tilbage-knap sandsynligvis ikke fungere som forventet, og brugeren kan opleve forvirrende navigation. For eksempel vil et link til en side, der indeholder flere interne sider, se sådan ud: <a href="multipage.html" rel="external">Multi-side link</a>.

"Tilbage"-knap Links (data-rel="back")

Hvis du bruger attributten data-rel="back" på et anker, vil ethvert klik på dette anker efterligne browserens tilbage-knap. Dette betyder, at det går et skridt tilbage i browserhistorikken og ignorerer ankerets standard href-attribut. Dette er særligt nyttigt, når du genererer 'tilbage'-knapper med JavaScript, f.eks. en knap til at lukke en dialogboks eller en modal. Selvom browsere, der understøtter denne funktion, ikke vil bruge den specificerede href-attribut, er det vigtigt at give en meningsfuld værdi, der faktisk peger på den henvisende sides URL. Dette sikrer, at funktionen fungerer for brugere i ældre (C-Grade) browsere, som ikke understøtter data-rel="back".

Hvis brugere kan nå denne side fra mere end én henvisende side, bør du stadig angive en fornuftig href, så navigationen forbliver logisk for alle brugere, uanset deres browser. Det er også vigtigt at huske, at hvis du blot ønsker en omvendt overgang uden faktisk at gå tilbage i historikken, bør du bruge attributten data-direction="reverse" i stedet. data-direction="reverse" er udelukkende beregnet til at køre den omvendte version af den overgang, der ville finde sted ved sideændringen, mens data-rel="back" gør linket funktionelt ækvivalent med browserens tilbage-knap, og al standard logik for tilbage-knappen gælder. At tilføje data-direction="reverse" til et link med data-rel="back" vil ikke vende den omvendte sideovergang og producere den 'normale' version af overgangen; de tjener helt forskellige formål.

Omdirigeringer og Links til Mapper

Når du linker til mappeindekser (f.eks. href="typercats/" i stedet for href="typercats/index.html"), skal du altid angive en efterfølgende skråstreg (trailing slash). Dette skyldes, at jQuery Mobile antager, at sektionen efter det sidste '/' tegn i en URL er et filnavn. Hvis der ikke er en trailing slash, vil rammeværket fjerne denne sektion, når det opretter basis-URL'er, hvorfra fremtidige sider vil blive refereret. Dette kan føre til forkerte stier og fejl i navigationen.

Du kan dog omgå dette problem ved at returnere din side div med en allerede specificeret data-url-attribut. Når du gør dette, vil jQuery Mobile bruge den pågældende attributs værdi til at opdatere URL'en i browserens historik, i stedet for den URL, der blev brugt til at anmode om siden. Dette giver dig også mulighed for at returnere URL'er, der ændres som følge af en omdirigering. For eksempel kan du sende en formular til /login.html, men returnere en side fra URL'en /konto efter en vellykket indsendelse. Dette værktøj giver dig kontrol over jQuery Mobiles historikstak i disse situationer, hvilket er afgørende for komplekse webapplikationer. Et eksempel kunne være et link, der peger på en mappe med en indeks side: <a href="docs-links-urltest/">Test Link</a>. Den returnerede side kan så opdatere hashen som /docs/pages/docs-links-urltest/ med en trailing slash via data-url-attributten i sidens kildekode. Husk, at værdien vil erstatte hele hashen, og det er op til dig at erstatte den med en URL, der faktisk løser til den korrekte side, når den anmodes via opdatering eller deep link.

Sammenligning af Linktyper i jQuery Mobile

For at give et klart overblik over de forskellige linktyper og deres adfærd i jQuery Mobile, er her en sammenligningstabel:

LinktypeBeskrivelseHvornår bruges den?Ajax-adfærdOvergang
Standard (<a href="side.html">)Standard links til eksterne HTML-filer.Til intern navigation mellem enkeltstående sider inden for samme domæne.Ja, som standard.Animeret
Ekstern (rel="external")Angiver et link til et andet domæne eller en fuld genindlæsning.Ved links til eksterne websites, eller til multi-side dokumenter fra en Ajax-indlæst side.Nej.Ingen
Deaktiver Ajax (data-ajax="false")Tvinger en fuld sidegenindlæsning, selvom linket er internt.Når specifikke sider ikke skal indlæses via Ajax, f.eks. til multi-side dokumenter, eller ved komplekse JavaScript-interaktioner der kræver en ren side. Kan også bruges på en forælder-container.Nej.Ingen
Intern (#ankerID)Linker til en side-div inden for samme HTML-dokument.Til navigation mellem 'sider' defineret i et enkelt HTML-fil.Ja (simuleret internt).Animeret
Tilbage-knap (data-rel="back")Efterligner browserens tilbage-knap.For at skabe dynamiske 'tilbage'-knapper, der navigerer bagud i historikken.N/A (manipulerer historie).Omvendt overgang (hvis tilgængelig).
Mapper (med data-url)Links til mapper, hvor den faktiske URL kan afvige fra anmodnings-URL'en.Ved omdirigeringer eller for at sikre korrekt URL i historikstakken for mapper.Ja, men URL i historik styres af data-url.Animeret

Ofte Stillede Spørgsmål (FAQ)

Hvorfor bruger jQuery Mobile Ajax som standard?
jQuery Mobile bruger Ajax som standard for at skabe en flydende og hurtig brugeroplevelse, der minder om en indbygget mobilapplikation. Ved at undgå fulde sidegenindlæsninger reduceres ventetiden, og animerede overgange kan anvendes, hvilket forbedrer den samlede opfattede ydeevne og brugervenlighed.
Hvad er Hijax?
Hijax er en teknik, hvor almindelige HTML-links opfanges af JavaScript (i dette tilfælde jQuery Mobile) og omdannes til Ajax-anmodninger. Dette giver fordelene ved Ajax (f.eks. ingen fuld sidegenindlæsning, animerede overgange) uden at fjerne grundlæggende funktionalitet for browsere, der ikke understøtter JavaScript, eller hvor JavaScript er deaktiveret.
Kan jeg deaktivere Ajax-navigation globalt?
Ja, det er muligt at deaktivere Ajax-navigation globalt i jQuery Mobile's konfiguration. Dette gøres typisk, hvis du foretrækker traditionel side-til-side navigation. Husk dog at overveje de potentielle konsekvenser for brugeroplevelsen og browserhistorikken, og deaktiver eventuelt $.mobile.pushStateEnabled for at undgå inkonsekvenser.
Hvad sker der, hvis en Ajax-anmodning mislykkes?
Hvis en Ajax-anmodning mislykkes i jQuery Mobile, vil rammeværket automatisk vise en kortvarig fejlmeddelelse som et overlay. Denne meddelelse er typisk diskret og forsvinder hurtigt for ikke at forstyrre brugerens navigation unødigt.
Hvorfor kan jeg ikke linke til et multi-side dokument via Ajax?
Du kan ikke linke til et multi-side dokument via Ajax, fordi jQuery Mobile kun vil indlæse den første 'side' (div data-role="page") den finder i dokumentet. Desuden vil der opstå hash-kollisioner mellem Ajax-historikken (som bruger hashen til at spore navigation) og de interne sider i multi-side dokumentet (som også bruger hashen til at identificere sider). For at linke til et multi-side dokument skal du bruge rel="external" eller data-ajax="false" for at tvinge en fuld sidegenindlæsning.
Hvad er formålet med data-rel="back"?
Formålet med data-rel="back" er at give et link funktionaliteten af browserens tilbage-knap. Når et element med denne attribut klikkes, vil det navigere tilbage i browserens historik, uafhængigt af linkets href-attribut. Dette er ideelt for at oprette dynamiske 'tilbage'-knapper i applikationer, f.eks. for at lukke dialogbokse eller vende tilbage til en tidligere tilstand.
Hvorfor er en trailing slash vigtig ved links til mapper?
En trailing slash (efterfølgende skråstreg) er vigtig ved links til mapper, fordi jQuery Mobile fortolker den sidste del af en URL uden en trailing slash som et filnavn. Hvis du linker til en mappe uden en trailing slash, kan rammeværket fejlagtigt fjerne den sidste del af stien, når den opretter basis-URL'er for fremtidig navigation, hvilket kan føre til brudte links og navigation.
Hvordan håndterer jQuery Mobile browserens tilbage-knap?
jQuery Mobile opdaterer automatisk sidens URL-hash, når du navigerer via Ajax eller interne links. Dette gør det muligt for browserens indbyggede tilbage-knap at fungere som forventet, hvilket giver brugere en velkendt måde at navigere baglæns på. Denne manipulation af URL-hashen er fundamental for jQuery Mobiles evne til at levere en "app-lignende" navigationsoplevelse med understøttelse af browserhistorik.

jQuery Mobiles linkhåndteringssystem er et glimrende eksempel på, hvordan et rammeværk kan abstrahere kompleksitet og levere en forbedret brugeroplevelse, samtidig med at det holder sig til webstandarder. Ved at forstå nuancerne af Ajax-navigation, deaktivering af Ajax, multi-side dokumenter og specifikke linkattributter som data-rel="back" og data-url, kan udviklere skabe yderst responsive og intuitive mobilwebapplikationer. Denne tilgang sikrer, at dine websteder føles som native apps, uden at du skal opfinde den dybe tallerken på ny.

Hvis du vil læse andre artikler, der ligner Forstå Links i jQuery Mobile: En Komplet Guide, kan du besøge kategorien Teknologi.

Go up