03. august 2007 - 22:03Der er
40 kommentarer og 1 løsning
Target i <a> accepteres ikke af HTML 4.01 Strict
Hej Eksperter.
Jeg læste lige et par artikler på nettet omkring forskelle på HTML 4.01 Transitional og Strict. Tilsyneladende er attributten "target" ikke accepteret i et anchor-tag (<a>), men hvor'n Shaitan skal man så åbne en URL i et nyt vindue uden brug af JavaScript?
Nej, men Google kan ikke køre JavaScript, og hvis jeg nu gerne vil have Google til at indeksere linket, går det desværre ikke at benytte JavaScript på linket. Æv!
Jeg mener, de kan da ikke bare fjerne muligheden for at åbne et link i et nyt vindue med HTML!? Eller det kan de åbenbart?
Som du kan se, vil Google kunne læse at der skal loades "file.htm".. Samtidigt giver man de såkaldte JavaScript-enabled (kan afvikle JavaScript) browsere mulighede for at åbne i et nyt vindue..
Meningen er, at en HTML 4.01 Strict parser ikke skal kikke efter en target-attribut. Så er det rystende ligegyldigt, om den er skrevet i koden eller sat med JavaScript.
Vil man åbne et vindue i HTML 4.01 Strict skal det gøres med window.open. Så er det ligemeget, om man sætter event-handlers med JS eller skriver dem i koden =)
Ja, det må være løsningen, hvis det skal være google-venligt. Jeg stødte bare lige på denne her fact, at target ikke duede, og det overraskede mig lidt, så følte lige, det måtte undersøges.
okay ... men undlad at sætte et target - da det jo ikke er tilladt. Sæt i stedet en onclick-handler, der åbner vinduet med window.open. Så bliver den lovlig ;o)
thesurfer: Hvad med at teste sin kode, inden man giver den videre? Eller i det mindste skrive: utestet
w13: Joh, HTML 4.01 Strict er nok "vejen frem" mod mindre HTML og mere CSS og Javascript, en opdeling der nok er godt. Men når man nu ikke ved hvad det indebærer, og du kan ikke regne med at olebole kommer og redder dig hver gang, så kan man jo vælge at holde sig til det fremragende HTML 4.01 Transitional, alle kender, som virker, og som man kan få hjælp til. Det var bare det jeg ville sige ... ;)
Erikjacobsen>> Ja, nu fandt jeg lige en liste over forskelle på transitional og strict, og det viser sig (også i følge w3c's validator), at jeg faktisk overholder standarden, på nær dette her target-sjov. :) Så jeg tror, jeg har fundet "min" doctype.
Den store sum point går til Thesurfer for hans kodeeksempler, som jeg har gemt i mit kodearkiv, men også tak til Ole og Erik for deres gode kompetencer! ;)
Ahh.. fejlen i min kode var en stavefejl, i ordet "length".. Det skal være: lnx.length
erikjacobsen> Ja, det ville have været en god ide. Men jeg mente at det her var så simpelt, at jeg sagtens kunne skrive et funktionelt eksempel, direkte i Ekspertens kommentar-fejl.
Koden virker også, hvis man lige retter min stavefejl.
- men stadigvæk: Det eneste, scriptet hjælper med, er at snyde W3C's validator. Det er stadig ikke valid kode, at bruge target i HTML 4.01 Strict.
Fidusen med en standard er, at indsnævre de ting, browseren skal forholde sig til. Jo mere stringent standarden er, jo bedre er muligheden for mindre klienter og mere økonomisk overkommeligt arbejde med at udvikle nye browser versioner.
Derfor er meningen ikke at snyde et tilfældigt stykke software på nettet (validatoren), men at skrive hensigtsmæssig kode ;o)
Skal tingene give mening, skal vinduerne med andre ord åbnes med window.open =)
Det kan godt være det virker at skrive lnx[i].target = "navnet"; i HTML 4.01 Strict, men target findes som sådan ikke. Det er bare browseren, der er flink ved dig. Som olebole siger: I HTML 4.01 Strict skal man bruge window.open. Og så kan man iøvrigt gøre det li'så elegant.
Og ja, thesurfer, du bruger den anonyme funktion forkert, for du udelukker at brugeren kan få et andet script til at virke, der også skal bruge window.onload. Men du kan jo stille et spørgsmål i Javascript kategorien ... ;)
Har lige læst, at "language" ikke er en understøttet attribut heller. :)
Koden må så blive: ----------------------------------------------------- <script type="text/JavaScript"> function appendEvent(a,b,c){ if(a.attachEvent){a.attachEvent("on"+b,c)} else if(a.addEventListener){a.addEventListener(b,c,false)} else{a["on"+b]=c} }
' Great.. så er rel="eksternside" heller ikke tilladt.. ' - ja, det kommer jo an på hvad der står hos w3.org. Jeg kan ikke gennemskue det, og bruger derfor ikke rel-attributten som sådan. Men man kan jo proppe en class-attribut på, og så checke dens navn.
For nu lige at komme evt. spørgsmål i forkøbet: Naturligvis burde jeg bruge DOM: if (aLinks[i].getAttribute("class").indexOf("denDerTargetTing")!=-1)
- men dette er et af de tilfælde, hvor DOM ikke er ordentlig/ens implementeret. IE kræver 'className' og alle andre kræver 'class' ... både, når der skal læses og sættes en klasse. Derfor bruger jeg den gamle 'JavaScript' property, indtil der bliver koncensus om 'class'.
Det samme gælder aflæsning af dynamiske værdier på form-elementer. Dér har jeg zq også givet fortabt :o|
thesurfer >> mange kjøvenhavnere påstår jo om Sverige, at dér er alt, hvad der ikke er forbudt, påbudt. Så slemt står det dog ikke helt til omkring webkode ;o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.