Avatar billede amews_aj Nybegynder
05. februar 2006 - 11:10 Der er 10 kommentarer og
2 løsninger

Javscript fejl ved innerHTML og innerText

Jeg får denne fejl i min javascript kode i IE:
Linje: 271
Tegn: 5
Fejl: Der opstod en ukendt kørselsfejl
Kode: 0

Fejlen kommer i min wysiwyg editor når jeg som html har skrevet
<p><hr></p> (Altså når jeg bruger den vandrette streg)
Fejlen kommer frem når jeg vil gå tilbage til wysiwyg fra HTML

Min kode er her:
RichEdit.prototype.previewWYSIWYG = function() {
  if(document.all) {
    this.richEdit.document.body.innerHTML = this.richEdit.document.body.innerText;
  } else {
    var html = this.richEdit.document.body.ownerDocument.createRange();
    html.selectNodeContents(this.richEdit.document.body);
    this.richEdit.document.body.innerHTML = html;
  }
}


Det er altså her det går galt, men hvorfor?:
this.richEdit.document.body.innerHTML = this.richEdit.document.body.innerText;
Avatar billede olebole Juniormester
05. februar 2006 - 11:39 #1
<ole>

<p><hr></p> er ikke valid HTML, så det kan tænkes, det er årsagen til, at IE brækker sig  :)

IE validerer f.eks. langt de fleste DOM-handlinger - i modsætning til 'browseren, der overholder standarderne' (*host-host*), Firefox. I den kan man foretage, hvad somhelst, uden den brokker sig ... f.eks. indsætte en hel tabel i et img-element!

Her bliver _intet_ valideret - og spørger man efter en ulovlig DOM-handling på body-elementets innerHTML, giver FF op og serverer i stedet et 'digt', der intet har at gøre med, hvordan innerHTML'en i virkeligheden ser ud.

- men *schhhhhhhh* ... sig det ikke til nogen ... det er sprængfarlige, politisk ukorrekte sandheder, kun ganske få vil lægge ører til  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
05. februar 2006 - 11:44 #2
PS: et p-element kan kun indeholde inline-elementer og/eller tekst-noder. Altså ingen h-, div-, table-, form- eller andre block-level elementer  =)
Avatar billede amews_aj Nybegynder
05. februar 2006 - 11:46 #3
Jeg foretrækker skam også FF men skal helst køre i IE også

Hvordan kan jeg få det til at virke?
Hvordan kan jeg banke ind i IE at den ikke skal brokke sig! :P

Kan jeg evt. køre en replace på <hr> tags inden jeg skifter til html og så tilbage bagefter?

Problemet er at IE selv skriver koden på den der måde
Hvis jeg skriver en linje i wysiwyg så opretter den <p></p>, og hvis jeg så sletter teksten igen og indsætter <hr>, så putter den det ind mellem p tags <p><hr></p>

Den er jo ret dum, den laver selv en kode den ikke forstår :P

men kan du hjælpe?
Avatar billede amews_aj Nybegynder
05. februar 2006 - 11:55 #4
Hmm, den laver kun den fejl, når man indsætter en <hr> på allerførste linje i wysiwyg, kan jeg forhindre den fejl?
Avatar billede olebole Juniormester
05. februar 2006 - 11:59 #5
Okay! ... hvad mener du med "Jeg foretrækker skam også FF"? Prøv at læse mit indlæg én gang til  ;o)

Det er faktisk FF, der ikke overholder standarderne - og gerne indsætter en hel tabel i et img- eller input-element - for derefter at digte om, hvad der står i innerHTML'en  ;o)

Du skal ikke have IE til at lade være med at brokke sig over invalid kode, men i stedet skrive noget kode, der får den til at opføre sig korrekt - og/eller rette den kode, den skriver.
Hvordan det aktuelt skal gøres, har jeg ingen anelse om - da det kræver, jeg ved præcist, hvad der foregår i editor'en ... og nej, jeg orker ikke gå editor'en igennem i enkeltheder  :)
Avatar billede amews_aj Nybegynder
05. februar 2006 - 12:06 #6
kan jeg ikke sige at den skal erstatte <P><HR> med <P></P><HR><P>

så vil der jo stå <P></P><HR><P></P>
Avatar billede olebole Juniormester
05. februar 2006 - 12:17 #7
Jojo ... det er helt legalt, da hr-elementet jo er et block-level element - og derfor gerne må være barn af body-elementet. Jeg havde blot misforstået dig derhen, at editoren/browseren ikke ville tillade den syntaks  :)
Avatar billede amews_aj Nybegynder
05. februar 2006 - 12:25 #8
Jeg har min kilde liggende i sSource, og gør derfor således, det virker.

sSource = sSource.replace("<P>\r\n<HR>", "<P></P>\r\n<HR>\r\n<P>");

Smid svar.. ;)

PS: Jeg har vist misforstået det med FF :P
Avatar billede olebole Juniormester
05. februar 2006 - 12:31 #9
Du skal nu lige have noget indhold i dit p-element - mindst et '&nbsp;'. Derudover er det altid skidt (og frarådes af W3C) at have 'tomme' p-elementer  :)
Avatar billede olebole Juniormester
05. februar 2006 - 12:38 #10
Hvad DOM-håndtering angår, overholder IE standarderne langt bedre end FF. Desuden er FF's XHTML-DOM blot en fattig overbygning på en i forvejen buggy HTML-DOM ... ikke en særskilt DOM, som MS implementerer, når de engang lader IE understøtte XHTML.

Man skal bare være forsigtig med at sige, at FF skodder mindst ligeså meget som IE (og på mange områder langt mere). Det er jo den seneste tid blevet klart, hvor store kræfter der kan frisættes, når man krænker folks tro ... og at FF skulle være væsentligt bedre end IE er i bund og grund en religiøs opfattelse, der ikke har rod i virkeligheden  :)
Avatar billede amews_aj Nybegynder
05. februar 2006 - 12:40 #11
ok, tak :)
Avatar billede olebole Juniormester
05. februar 2006 - 12:47 #12
Du skal være velkommen ... og tak for points  ;o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester