/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
innerHTML
Fra : Jonas Koch Bentzen


Dato : 31-08-02 16:50

Findes der en let måde at afgøre, om en browser understøtter innerHTML?
Det bedste, jeg har kunnet finde på, er nedenstående - men måske findes
der en enklere løsning?

// Hvis browseren understøtter getElementById()
// og ikke er Opera version 6 og nedefter:
if (document.getElementById && !(navigator.userAgent.indexOf("Opera") !=
-1 && parseInt("6") <= 6))


 
 
Stig Nygaard (31-08-2002)
Kommentar
Fra : Stig Nygaard


Dato : 31-08-02 19:01

Hej Jonas


Jonas Koch Bentzen wrote:
> Findes der en let måde at afgøre, om en browser understøtter innerHTML?

if(document.innerHTML)
burde da nok virke. Lav dog evt. checket på noget andet end document, da
jeg kunne forestille mig at det er ret ressourcekrævende ved store
dokumenter.


--
Mvh. Stig
stig[at]rockland[dot]dk
http://www.rockland.dk/
* Bedre (D)HTML ?! --> http://www.rockland.dk/stig/upghtml.html *


Jonas Koch Bentzen (31-08-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 31-08-02 19:07

Stig Nygaard wrote:
>
> if(document.innerHTML)
>
> burde da nok virke. Lav dog evt. checket på noget andet end document

Man burde vel lave det på klassen, som metoden tilhører - men jeg har
ikke kunnet finde ud af hvilken klasse, innerHTML() tilhører - ved du
evt. det?


Stig Nygaard (31-08-2002)
Kommentar
Fra : Stig Nygaard


Dato : 31-08-02 19:38

Hej Jonas


Jonas Koch Bentzen wrote:
>> if(document.innerHTML)
> Man burde vel lave det på klassen, som metoden tilhører - men jeg har
> ikke kunnet finde ud af hvilken klasse, innerHTML() tilhører - ved du
> evt. det?

HTMLElement er klassen. Men det burde nu være nok at teste på et objekt
under de fleste omstændigheder. Det er nemlig sådan at "undefined"
fortolkes som "false" i et boolsk udtryk. Der hvor der kan opstå
problemer er hvis innerHTML kan være defineret sammentid med at den har
en værdi som fortolkes som "false". Hvis den testede egenskab f.eks. kan
indeholde værdien "0" har vi problemet, men det burde i hvert fald ikke
være et problem for document.innerHTML.

Skal det se lidt mere formelt ud, og ikke være en metode som lader sig
narre af værdien "0", så prøv:

if(typeof(document.innerHTML)!='undefined')


--
Mvh. Stig
stig[at]rockland[dot]dk
http://www.rockland.dk/
* Bedre (D)HTML ?! --> http://www.rockland.dk/stig/upghtml.html *


Jonas Koch Bentzen (31-08-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 31-08-02 19:17

Stig Nygaard wrote:
>
> if(document.innerHTML)

Den returnerer falsk i Konqueror (3.0.1) og Mozilla (1.1), så den er nok
ikke så brugbar :)


Stig Nygaard (31-08-2002)
Kommentar
Fra : Stig Nygaard


Dato : 31-08-02 19:43

Hej Jonas


Jonas Koch Bentzen wrote:
>> if(document.innerHTML)
> Den returnerer falsk i Konqueror (3.0.1) og Mozilla (1.1), så den er nok
> ikke så brugbar :)

Det overrasker mig, men det er utestet kode. Tester du mens dokumentet
loades eller først når det er læst helt ind ? Du kan nok først regne med
det når dokumentet er læst helt ind.

Ellers se typeof-forslaget i min anden post. Mon ikke den virker?

PS. Tak for din email angående Konqueror 3 og CSS folde-ud menuerne. Jeg
må få opdateret min lille artikel/note her en af dagene.


--
Mvh. Stig
stig[at]rockland[dot]dk
http://www.rockland.dk/
* Bedre (D)HTML ?! --> http://www.rockland.dk/stig/upghtml.html *


Stig Nygaard (31-08-2002)
Kommentar
Fra : Stig Nygaard


Dato : 31-08-02 20:24

Hej igen igen


Jonas Koch Bentzen wrote:
>> if(document.innerHTML)
> Den returnerer falsk i Konqueror (3.0.1) og Mozilla (1.1), så den er nok
> ikke så brugbar :)

Bliver lige i tvivl om det er korrekt at bruge innerHTML direkte på
document. Det er nok det som er problemet. Brug et eller andet element i
stedet. Noget a'la:

if(document.getElementById('testelem').innerHTML)
....


--
Mvh. Stig
stig[at]rockland[dot]dk
http://www.rockland.dk/
* Bedre (D)HTML ?! --> http://www.rockland.dk/stig/upghtml.html *


Jonas Koch Bentzen (31-08-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 31-08-02 21:52

Stig Nygaard wrote:
>
> Bliver lige i tvivl om det er korrekt at bruge innerHTML direkte på
> document. Det er nok det som er problemet. Brug et eller andet element i
> stedet. Noget a'la:
>
> if(document.getElementById('testelem').innerHTML)

Hmm... Så er vi allerede ude i noget hack-noget, så spørgsmålet er, om
det ikke bare er bedre at bruge document.getElementById og så udelukke
Opera 6 og nedefter.


Lasse Reichstein Nie~ (31-08-2002)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 31-08-02 22:13

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> Stig Nygaard wrote:
> >
> > Bliver lige i tvivl om det er korrekt at bruge innerHTML direkte på
> > document. Det er nok det som er problemet. Brug et eller andet
> > element i stedet. Noget a'la:
>
> > if(document.getElementById('testelem').innerHTML)
>
>
> Hmm... Så er vi allerede ude i noget hack-noget, så spørgsmålet er, om
> det ikke bare er bedre at bruge document.getElementById og så udelukke
> Opera 6 og nedefter.

Det afhænger af om der findes en anden browser med getElementById og
uden innerHTML. Det ville undre mig meget hvis der ikke gjorde, eller
ikke ville komme flere, da getElementById er W3C-standard og innerHTML
ikke er.

Det er altid mere fremtidssikret at teste for præcist den ting man
skal bruge (innerHTML), end det er at teste for noget og så regne med
at der er en sammenhænge (getElementById og browser-ID).

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'

Jonas Koch Bentzen (31-08-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 31-08-02 22:46

Lasse Reichstein Nielsen wrote:
> Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
>
>
>>Stig Nygaard wrote:
>>
>>>Bliver lige i tvivl om det er korrekt at bruge innerHTML direkte på
>>>document. Det er nok det som er problemet. Brug et eller andet
>>>element i stedet. Noget a'la:
>>
>>>if(document.getElementById('testelem').innerHTML)
>>
>>
>>Hmm... Så er vi allerede ude i noget hack-noget, så spørgsmålet er, om
>>det ikke bare er bedre at bruge document.getElementById og så udelukke
>>Opera 6 og nedefter.
>
>
> Det afhænger af om der findes en anden browser med getElementById og
> uden innerHTML.

Det vigtige er, at jeg ikke udelukker nogen browsere udover den ene
browser, jeg *ved* ikke forstår innerHTML(). Der er stor forskel på det,
jeg gør, og så det den der med "if (browser != ie && browser !=
navigator) alert('Få dig en moderne browser')" - i den situation står
man måske med en Konqueror, der sagtens kan forstå sitets JavaScript,
men alligevel ikke kan komme ind. Det, jeg gør her, er at udelukke en
ganske bestemt browser og en ganske bestemt version, fordi jeg ved med
sikkerhed, at den ikke forstår innerHTML().

> Det ville undre mig meget hvis der ikke gjorde, eller
> ikke ville komme flere, da getElementById er W3C-standard og innerHTML

Jeg synes ellers, jeg har hørt, at innerHTML() også er en standard nu...
Eller hvad?

> Det er altid mere fremtidssikret at teste for præcist den ting man
> skal bruge (innerHTML), end det er at teste for noget og så regne med
> at der er en sammenhænge (getElementById og browser-ID).

Jeg er i princippet enig, men jeg synes samtidig, at de forslag, der har
været her, har været ret hack-agtige - og netop fordi, der
tilsyneladende ikke findes en ordentlig måde at teste, om en funktion
findes på, kan man heller ikke være sikker på, at de metoder, der er
foreslået her, vil virke med ukendte browsere.


Lasse Reichstein Nie~ (01-09-2002)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-09-02 00:55

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> Det vigtige er, at jeg ikke udelukker nogen browsere udover den ene
> browser, jeg *ved* ikke forstår innerHTML(). Der er stor forskel på
> det, jeg gør, og så det den der med "if (browser != ie && browser !=
> navigator) alert('Få dig en moderne browser')" - i den situation står
> man måske med en Konqueror, der sagtens kan forstå sitets JavaScript,
> men alligevel ikke kan komme ind. Det, jeg gør her, er at udelukke en
> ganske bestemt browser og en ganske bestemt version, fordi jeg ved med
> sikkerhed, at den ikke forstår innerHTML().

Du vil stadig udelukke en browser der ikke har getElementById, men har
innerHTML. Det er dog en usædvanlig konstruktion, men dit script kunne
måske virke alligevel.

Du vil fejle for browsere der har getElementById, ikke har innerHTML,
og ikke er Opera <=6, da dit script antager at de har innerHTML på
baggrund af getElementById. Jeg ved ikke om en sådan browser findes,
men personligt gætter jeg på at den findes, eller vil blive lavet
senere.

> Jeg synes ellers, jeg har hørt, at innerHTML() også er en standard
> nu... Eller hvad?

Det har jeg ikke hørt, det ville være noget helt nyt.
Mozilla-folkene siger at den ikke er en del af W3C's specifikation:
<URL:http://www.mozilla.org/docs/dom/domref/dom_el_ref8.html>

Her er en anden diskussion om hvorvidt innerHTML er en god ting:
<URL:http://www.developer-x.com/content/innerhtml/>
(udvalgt udelukkende ud fra at den stod højt på en Google-søgning).

> Jeg er i princippet enig, men jeg synes samtidig, at de forslag, der
> har været her, har været ret hack-agtige - og netop fordi, der
> tilsyneladende ikke findes en ordentlig måde at teste, om en funktion
> findes på, kan man heller ikke være sikker på, at de metoder, der er
> foreslået her, vil virke med ukendte browsere.

Principielt bliver man nødt til at tjekke om innerHTML findes på
hvert HTML-objekt man vil bruge den på (netop fordi der ikke er
nogen specifikation, så alle implementationer er ad-hoc). I praksis
vil det nok være nok at tjekke et enkelt HTML-objekt, f.eks. body,
som er nemt tilgængelig.

Efter min personlige smag er det mere "hacket" at basere det på
eksistensen af getElementById.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'

Jonas Koch Bentzen (01-09-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 01-09-02 01:13

Lasse Reichstein Nielsen wrote:
>
> Du vil stadig udelukke en browser der ikke har getElementById, men har
> innerHTML.

:) Ja, det ved jeg. Det, jeg skal bruge det til, er en forbedring af
brugerfladen. Ældre browsere vil få en almindelig brugerflade, mens
browsere, der forstår innerHTML(), vil få en smart overbygning, der gør
brugerfladen hurtigere. Der er ikke nogen, der decideret bliver udelukket.

> Det har jeg ikke hørt, det ville være noget helt nyt.
> Mozilla-folkene siger at den ikke er en del af W3C's specifikation:
> <URL:http://www.mozilla.org/docs/dom/domref/dom_el_ref8.html>

Okay - hvad er der så af alternativer til innerHTML()?


Lasse Reichstein Nie~ (01-09-2002)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 01-09-02 02:59

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> > Det har jeg ikke hørt, det ville være noget helt nyt.
> > Mozilla-folkene siger at den ikke er en del af W3C's specifikation:
> > <URL:http://www.mozilla.org/docs/dom/domref/dom_el_ref8.html>
>
> Okay - hvad er der så af alternativer til innerHTML()?

Det andet link, <URL:http://www.developer-x.com/content/innerhtml/>,
kommer med et par forslag.

En mulighed er at gøre det hele i DOM, med document.createElement, og
lave strukturen direkte.

En anden er allerede at have strukturen man skal bruge, i dokumentet
(f.eks. gemt med display:none), og så bruge cloneNode til at lave en
kopi når man skal bruge den.

Der er nok ikke noget der er så nemt at bruge som innerHTML, som jo
har en HTML-parser indbygget.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'

Jonas Koch Bentzen (01-09-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 01-09-02 16:37

Lasse Reichstein Nielsen wrote:
> Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
>
>
>>>Det har jeg ikke hørt, det ville være noget helt nyt.
>>>Mozilla-folkene siger at den ikke er en del af W3C's specifikation:
>>><URL:http://www.mozilla.org/docs/dom/domref/dom_el_ref8.html>
>>
>>Okay - hvad er der så af alternativer til innerHTML()?
>
>
> Det andet link, <URL:http://www.developer-x.com/content/innerhtml/>,
> kommer med et par forslag.

Tak for linket - det viser sig, at det slet ikke er så svært at komme
uden om innerHTML (og så har jeg jo også lært lidt om DOM-programmering).

> Der er nok ikke noget der er så nemt at bruge som innerHTML, som jo
> har en HTML-parser indbygget.

I mit tilfælde er det faktisk ikke så svært, for jeg skal ikke bruge
selve HTML'en (og det elementet, jeg skal hente teksten fra, indeholder
heller ikke særligt meget HTML).


Jonas Koch Bentzen (01-09-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 01-09-02 16:57

Lasse Reichstein Nielsen wrote:
>
> Det andet link, <URL:http://www.developer-x.com/content/innerhtml/>,
> kommer med et par forslag.

Kan det passe, at Opera ikke understøtter sådan noget som firstChild og
nodeValue? Jeg bruger Opera 6.02 til Linux.

Nå, det gør vel ikke så meget. Eftersom de to ting er standard, kan man
(i modsætning til tilfældet innerHTML) vel forvente, at Opera vil
understøtte det i nær fremtid.


Lasse Reichstein Nie~ (02-09-2002)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 02-09-02 02:12

Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:

> Kan det passe, at Opera ikke understøtter sådan noget som firstChild
> og nodeValue? Jeg bruger Opera 6.02 til Linux.

Det lyder sandsynligt. Opera 6 mangler nogle features til dynamisk
behandling af DOM-objekter.

> Nå, det gør vel ikke så meget. Eftersom de to ting er standard, kan
> man (i modsætning til tilfældet innerHTML) vel forvente, at Opera vil
> understøtte det i nær fremtid.

Opera siger at version 7 kommer "soon". Mere præcist har de ikke
villet sige det. O7 skulle understøtte det meste DOM. Vi krydser
bare fingre indtil da :)

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'

Lasse Reichstein Nie~ (31-08-2002)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 31-08-02 21:53

Stig Nygaard <stig@REMOVE-THISrockland.dk> writes:

> Bliver lige i tvivl om det er korrekt at bruge innerHTML direkte på
> document.

Næppe, det er ikke et HTML-element. Det virker heller ikke i IE :)

> Det er nok det som er problemet. Brug et eller andet element
> i stedet. Noget a'la:
>
> if(document.getElementById('testelem').innerHTML)
> ...

Hvis man ikke lige har et navgivent element tilgængeligt, så er det
måske nok at bruge document.body, altså

if (typeof(document.body.innerHTML)!='undefined') ...

Det virker i både Mozilla og IE6.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'

Rune Glerup (01-09-2002)
Kommentar
Fra : Rune Glerup


Dato : 01-09-02 14:13

Jonas Koch Bentzen skrev:

> Findes der en let måde at afgøre, om en browser understøtter innerHTML?

Jeg ville bruge de ting der er med i DOM1 i stedet for innerHTML der
ikke er med i standarden.

> Det bedste, jeg har kunnet finde på, er nedenstående - men måske findes
> der en enklere løsning?

Det er ikke nødvendigt at beskytte Opera ... som standard er der ikke
slået noget debugger–værktøj til.

--
/Rune
w|http://kaboom.dk/
Har du ikke adgang til SSI? Prøv
<http://kaboom.dk/works/wwwhitepapers/preuploadincluding/>

Jonas Koch Bentzen (01-09-2002)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 01-09-02 15:16

Rune Glerup wrote:
>
> Jeg ville bruge de ting der er med i DOM1 i stedet for innerHTML der
> ikke er med i standarden.

Det har jeg også tænkt mig. Jeg er normalt standard-rytter, men denne
gang overså jeg altså, at innerHTML() ikke er standard (jeg bildte mig
ind, at den var standard, fordi både Konqueror og Mozilla understøtter den).


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste