Avatar billede tdaugaard Nybegynder
09. december 2000 - 23:37 Der er 19 kommentarer og
2 løsninger

ErrorHandling i JavaScript

Hvordan er det muligt at undgå at IE viser evt. JavaScript fejl I JavaScript.

noget On Error måske ?
Hvis det siger nogle noget, så gør man flg. i f.eks. Visual Basic:

On Local Error Goto en_label

udfør koden der evt. kan generere fejl


en_label:
  gør noget hvis der er en fejl
Avatar billede erikjacobsen Ekspert
09. december 2000 - 23:54 #1
Dum bemærkning: hvad med at undgå de javascript fejl ved at skrive det ordentligt?
Jeg ved vist nok hvordan  - 2 secs.
Avatar billede erikjacobsen Ekspert
09. december 2000 - 23:57 #2
window.onerror=null;
Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:00 #3
erikjakobsen:> det ER skrevet ordentligt.
Jeg kan lige forklare problemet så kan du forstå hvorfor.

Det er til en chat hvor ALT bliver opdateret fra en skjult frame til <div>\'s via JavaScript.
Da den skjulte fram bliver loaded først (jeg kunne se\'følig loade den sidst . har jeg da ikke tænkt på *DOH*) så checker den om de andre frames er loaded, hvis ikke sætter den et TimeOut på 1 sec og prøver igen indtil den funker. Men af en eller anden underlig grun for jeg sometider en \"document.message.user is null or not an object\" og det bvil jeg undgå ..

kan man sætte

window.onerror=procedure_der_skal_udføres;

istedet for null ?
Avatar billede erikjacobsen Ekspert
10. december 2000 - 00:16 #4
Man kan sætte en procedure ind, nemlig.
Men vi kunne jo også løse dit problem med at teste om en ramme er hentet.

I ramme1, der tester om ramme2 er hentet spørger du på:

  if (top.ramme2.sjovvariabel!=\"\") {  .. er hentet ..} else { .. er ikke ..}

Og i ramme2 skriver du:

  <body ...  onload=\"sjovvariabel=7913;\">

Problemet med at spørge på document.message.user, er at message-objektet skal
være der for at kunne spørge på en delvariabel, mens \"toplevel\" variabler altid
kan spørges på.

Øh - tror jeg nok - prøv hellere :-)

 


Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:22 #5
Du kan se den her function .. det er en af dem der er bøvl med..
Som du kan se bruger jeg .readyState == \"complete\" til at teste om framen er loadet. Det fandt jeg ud af man kunne så derfor brugte jeg den. Men jeg kan godt se at hvis framen SLET ikke er hentet så kan jeg heller ikke teste på .readyState .. eller hva d ?

Problemet med den fejl jeg får ligger så i at

expirTimer=setTimeout(\"showexpiration();\", 1000);

ikke bliver udført.. så den går ikke videre

function showexpiration() {
    if (parent.header.document.readyState == \"complete\") {
        parent.header.expir.value=\"Expiration time 00:<%=strTime%>\";
        clearTimeout(expirTimer);
    } else {
        expirTimer=setTimeout(\"showexpiration();\", 1000);
    }
}
Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:26 #6
Det med \"prøv hellere\" .. det er lidt ..svært for det er kun en gang i mellem fejlen kommer .. (ja, lyder meget wierd!)
Avatar billede erikjacobsen Ekspert
10. december 2000 - 00:27 #7
Jeg er ikke klar over præcis hvordan readyState virker. Men det må være
nemt at prøve mit forslag.
Avatar billede stringbuffer Nybegynder
10. december 2000 - 00:27 #8
du skal lave en function, der udfører hvad du vil når der opstår en fejl.
Denne funktion vil blive kaldt med sidens URL, linienummer hvor fejlen opstod og så selve besked med beskrivelse af fejlen.

her er et eksempel:
<SCRIPT LANGUAGE=\"JavaScript\">
window.onerror = function(msg, url, linenr) {
var strErr = \"Fejlen er sendt til min egen error-handler.\\n\\nSidens URL er: \"+url+\"\\nFejlen opstod i linie \"+linenr+\"\\nBeskrivelse af fejlen:\\n\"+msg;
alert(strErr);
return true;
}
</SCRIPT>
Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:30 #9
erikjakobsen:> .readyState = \"loading\" eller \"complete\" alt efter hvad \"state\" rammen er i.
stringbuffer:> jeg ved skam godt hvordan jeg laver en function til af fange fejlen nu med .onerror ..
Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:33 #10
Forresten, findes der ikke en funktion a\' la IsObject() (ligesom så mange andre Is???? funktioner..) i JavaScript?
Avatar billede stringbuffer Nybegynder
10. december 2000 - 00:35 #11
koden vil så svare til at du laver en label med denne funktions kode og fortæller at den skal lave en goto til den kode.

Du kan naturligvis lave flere forskellige funktioner, der kan håndtere fejl på forskellige måder.
function errHandler1(msg, url, linenr) { ... }
function errHandler2(msg, url, linenr) { ... }
function errHandler3(msg, url, linenr) { ... }

så når du kalder en function, der kan give en fejl, og du f.eks. vil have koden i errHandler1 til at tage sig af fejlen, siger du bare:

function funCtionDerKanGiveFejl() {
window.onerror = errHandler1;
//kode, der kan give fejl her
window.onerror = null; //eller den error handler, du bruger som default
}
Avatar billede stringbuffer Nybegynder
10. december 2000 - 00:38 #12
ehm... såvidt jeg kan huske var spørgsmålet noget med hvordan man kan kan gøre så der IKKE bliver vist javascript fejl. Svaret er så at du skal lave en error handler, der laver intet.
Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:42 #13
Ja, det er rigtigt... men jeg anede ikke helt om man kunne lave så den udførte en proc. istedet, men det så jeg jo man kunne...

Men jeg har jo sådanset fået mit svar, så tak for det. Jeg synes lige at du (stringbuffer) også skulle have lidt point da du hjalp lidt også .. jeg får sikkert brug for det på et eller andet tidspunkt.
Avatar billede stringbuffer Nybegynder
10. december 2000 - 00:43 #14
istedet for isObject kan du sige (typeof(din_variabel) == \"object\")
Avatar billede tdaugaard Nybegynder
10. december 2000 - 00:43 #15
Kewl .. fedt nok .. jeg siger mange tak til jer begge så!
Avatar billede erikjacobsen Ekspert
10. december 2000 - 01:28 #16
Det er jo rigtigt. Hvis du ikke kan teste på top.ramme2.sjovtnavn!=\"\"
kan du prøve på typeof(top.ramme2.sjovtnavn)!=\"undefined\" . Det sidste
er måske nok trods alt mest sikkert.
Avatar billede tdaugaard Nybegynder
10. december 2000 - 01:30 #17
Jeg prøver at sætte det ind senere og se om jeg får nogle videre klager over fejl.. mange tak endnu engang!
Avatar billede frank_jensen Nybegynder
11. december 2000 - 08:07 #18
Hvorfor ikke bare bruge Try-Catch statementet ???
Avatar billede erikjacobsen Ekspert
11. december 2000 - 09:00 #19
Ja, hvis man kun vil nøjes med IE5+ (og vistnok NS6+) så kan
man jo bruge try-catch. Det er bare synd for resten.
Avatar billede frank_jensen Nybegynder
11. december 2000 - 12:01 #20
Det er jo an på....

Snakker vi ikke ASP ???  Så ligger det jo på serveren, og så er det bare Windows Script Host man skal opdaterer...  På klienten aner jeg det ikke, men der tester man jo sjældent på objekter ???
Avatar billede erikjacobsen Ekspert
11. december 2000 - 12:06 #21
Vi snakker ikke JavaScript i ASP, men på klienten ;-)
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