|
| Problemer med innerHTML i Mozilla Fra : Ryan Kristensen |
Dato : 01-05-05 15:29 |
|
Jeg har været igang med at lege med innerHTML, men jeg har lidt problemer
med Mozilla, når jeg sender contentType:application/xhtml+xml.
Tilsyneladende fanger den ikke:
if (typeof(paragraph.innerHTML)!='undefined') {
men går i stedet videre og fejler ved:
paragraph.innerHTML = "test";
Hele funktionen kan ses her:
var paragraph = document.getElementById('test');
if (typeof(paragraph.innerHTML)!='undefined') {
paragraph.innerHTML = "test";
}
else {
paragraph.appendChild(document.createTextNode('test'));
}
}
Link til en side der viser problemet:
<url: http://ryankristensen.com/tests/innerHTML.asp>
Siden virker som den skal i Opera, men ikke i Mozilla. - Og IE kan jo ikke
se application/xhtml+xml.
Er der nogen der har et forslag til, hvordan man undgår at Mozilla fejler?
--
Ryan Kristensen
| |
Jens Gyldenkærne Cla~ (01-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 01-05-05 22:24 |
|
Ryan Kristensen skrev:
> Jeg har været igang med at lege med innerHTML, men jeg har
> lidt problemer med Mozilla, når jeg sender
> contentType:application/xhtml+xml. Tilsyneladende fanger den
> ikke: if (typeof(paragraph.innerHTML)!='undefined') {
Der kommer en generel js-fejl på din side:
Error: uncaught exception: [Exception... "Component returned
failure code: 0x80004005 (NS_ERROR_FAILURE)
[nsIDOMNSHTMLElement.innerHTML]" nsresult: "0x80004005
(NS_ERROR_FAILURE)" location: "JS frame ::
http://ryankristensen.com/tests/innerHTML.asp :: test :: line 14"
data: no]
Har du prøvet at se om det hjælper hvis du lægger scriptet
eksternt?
Prøv evt. også at køre Venkman (javascript debugger til Mozilla og
Firefox) på siden.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html
| |
Tomasz Otap (01-05-2005)
| Kommentar Fra : Tomasz Otap |
Dato : 01-05-05 23:51 |
|
Jens Gyldenkærne Clausen wrote:
> Ryan Kristensen skrev:
>>contentType:application/xhtml+xml. Tilsyneladende fanger den
>>ikke: if (typeof(paragraph.innerHTML)!='undefined') {
>
> [nsIDOMNSHTMLElement.innerHTML]" nsresult: "0x80004005
> (NS_ERROR_FAILURE)" location: "JS frame ::
Jeg faldt over denne her artikel, hvor brug af innerHTML vs. DOM-metoder
bliver diskuteret:
http://www.developer-x.com/content/innerhtml/
Ret interessant. Hvis innerHTML-implementationen er så buggy i
Gecko-browsere, er det nok sikrere at holde sig til DOM-modellen, især
da innerHTML er ikke en W3C standard. På den anden side lader den til at
være en del hurtigere end DOM-manipulationer, og nok mere udbredt.
Anyways, du kan vel bruge check for paragraph.firstChild i stedet?
------------
var paragraph = document.getElementById('test');
if (paragraph.firstChild) {
paragraph.firstChild.nodeValue='test';
}
else {
paragraph.appendChild(document.createTextNode('test'));
}
------------
t
| |
Ryan Kristensen (02-05-2005)
| Kommentar Fra : Ryan Kristensen |
Dato : 02-05-05 10:12 |
|
On Mon, 02 May 2005 00:51:04 +0200, Tomasz Otap
<tomasz@otap.justRemoveThis.dk> wrote:
> Ret interessant. Hvis innerHTML-implementationen er så buggy i
> Gecko-browsere, er det nok sikrere at holde sig til DOM-modellen, især
> da innerHTML er ikke en W3C standard. På den anden side lader den til at
> være en del hurtigere end DOM-manipulationer, og nok mere udbredt.
Så vidt jeg kan teste mig frem til, så virker innerHTML fint i Mozilla
1.7.5, når content-type er text/html.
Ved application/xhtml+xml så kan den tilsyneladende kun læse fra innerHTML.
Hvis nu bare den var implementeret på samme måde som document.all, så
kunne man finde ud af, at man ikke skulle bruge den metode, før man
forsøgte på det.
> Anyways, du kan vel bruge check for paragraph.firstChild i stedet?
>
> ------------
> var paragraph = document.getElementById('test');
> if (paragraph.firstChild) {
> paragraph.firstChild.nodeValue='test';
> }
> else {
> paragraph.appendChild(document.createTextNode('test'));
> }
Dette giver ingen forskel, - andet end, at der ikke er noget firstChild på
paragraph, så den går videre til
paragraph.appendChild(document.createTextNode('test'));
hvilket selvfølgelig virker fint, dog kan man ikke udskrive <br /> på
denne måde.
Jeg har løst problemet på denne måde:
var arrErrorMsg = errormsg.split('<br />');
// errormsg er en streng der indeholder forskellige fejlbeskeder, som
gerne skulle adskilles af et linieskift.
var paragraph = document.createElement('p');
paragraph.id = 'errormsg';
for (a=0;a<arrErrorMsg.length-1;a++) {
paragraph.appendChild(document.createTextNode(arrErrorMsg[a]));
paragraph.appendChild(document.createElement('br'));
}
myForm.insertBefore(paragraph,myForm.firstChild);
Men derfor kunne jeg alligevel godt tænke mig, at finde ud af, om der var
en måde man kunne teste på, så Mozilla ikke ville forsøge at skrive til
innerHTML.
--
Ryan Kristensen
| |
Ryan Kristensen (02-05-2005)
| Kommentar Fra : Ryan Kristensen |
Dato : 02-05-05 10:12 |
|
On Sun, 01 May 2005 23:23:48 +0200, Jens Gyldenkærne Clausen
<jens@gyros.invalid> wrote:
> Der kommer en generel js-fejl på din side:
>
> Error: uncaught exception: [Exception... "Component returned
> failure code: 0x80004005 (NS_ERROR_FAILURE)
> [nsIDOMNSHTMLElement.innerHTML]" nsresult: "0x80004005
> (NS_ERROR_FAILURE)" location: "JS frame ::
> http://ryankristensen.com/tests/innerHTML.asp :: test :: line 14"
> data: no]
Jeg har prøvet at kigge på den, men kan nu ikke helt decifrere, hvad de
mener med det.
> Har du prøvet at se om det hjælper hvis du lægger scriptet
> eksternt?
Ingen forskel
> Prøv evt. også at køre Venkman (javascript debugger til Mozilla og
> Firefox) på siden.
Der kommer ingen fejlmeddelelse, - men jeg er heller ikke sikker på, at
jeg bruger den korrekt.
--
Ryan Kristensen
| |
Martin Hintzmann And~ (01-05-2005)
| Kommentar Fra : Martin Hintzmann And~ |
Dato : 01-05-05 23:33 |
|
Ryan Kristensen wrote:
>
> Er der nogen der har et forslag til, hvordan man undgår at Mozilla fejler?
>
Du skal kontrollere på document.innerHTML og ikke paragraph.innerHTML.
Og så vil jeg også mene at der er nok at spørge på følgende måde:
if (document.innerHTML) { ... }
--
Martin Hintzmann Andersen
http://www.hintzmann.dk/
| |
Ryan Kristensen (02-05-2005)
| Kommentar Fra : Ryan Kristensen |
Dato : 02-05-05 10:12 |
|
On Mon, 02 May 2005 00:32:34 +0200, Martin Hintzmann Andersen
<no@spam.invalid> wrote:
> Du skal kontrollere på document.innerHTML og ikke paragraph.innerHTML.
> Og så vil jeg også mene at der er nok at spørge på følgende måde:
> if (document.innerHTML) { ... }
Dette gør ingen forskel. Så vidt jeg kan se, så kan Mozilla godt læse fra
innerHTML, men den kan ikke skrive til den - når den er i
application/xhtml+xml.
I text/html virker det fint.
--
Ryan Kristensen
| |
Jens Gyldenkærne Cla~ (02-05-2005)
| Kommentar Fra : Jens Gyldenkærne Cla~ |
Dato : 02-05-05 10:27 |
| | |
Martin Hintzmann And~ (02-05-2005)
| Kommentar Fra : Martin Hintzmann And~ |
Dato : 02-05-05 11:11 |
|
Ryan Kristensen wrote:
>
>
> Dette gør ingen forskel. Så vidt jeg kan se, så kan Mozilla godt læse
> fra innerHTML, men den kan ikke skrive til den - når den er i
> application/xhtml+xml.
> I text/html virker det fint.
>
Ja, du kan ikke benytte document.write() og der er skrive adgang på
innerHTML, når du benytter den content-type. Da man ellers ville kunne
indsætte ugyldigt XHTML kode.
--
Martin Hintzmann Andersen
http://www.hintzmann.dk/
| |
Ryan Kristensen (03-05-2005)
| Kommentar Fra : Ryan Kristensen |
Dato : 03-05-05 11:59 |
|
On Mon, 02 May 2005 12:10:44 +0200, Martin Hintzmann Andersen
<no@spam.invalid> wrote:
> Ja, du kan ikke benytte document.write() og der er skrive adgang på
> innerHTML, når du benytter den content-type. Da man ellers ville kunne
> indsætte ugyldigt XHTML kode.
Nå, selvfølgelig.
Lidt ærgeligt at man så ikke kan teste, om det virker. Men så bliver man
da tvunget til at benytte ordentlig kode
--
Ryan Kristensen
| |
|
|