2012-01-19 5 views
8

Tak więc teraz mamy pewien ogólny kod do zgłaszania błędów z naszego kodu lub kodu strony trzeciej. Nasz projekt to projekt JQM/Phonegap na iOS. Co się dzieje, prawie zawsze otrzymujemy ten sam bezużyteczny błąd ... TypeError: 'undefined' nie jest funkcją ... bez numeru wiersza lub innych pomocnych informacji. Czy istnieje sposób, w jaki mogę zmienić kod, aby uzyskać CZYM jest niezdefiniowany lub GDZIE on jest?Poprawianie naszego zgłaszania błędów javascript

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    //Handle errors not in a jquery event handler 
    //DebugMessage(errorMSg + " "+ url + " " + lineNumber); 
    var ex = new Error(errorMsg, url, lineNumber); 
    HandleError(ex, "window.onerror"); 
     //HandleError sends the error object to 
     //a webservice to log the error. 
    return true; 
}; 

Pomocne mogą być także wszelkie wskazówki dotyczące debugowania błędów javascript.

+1

Mam ten sam problem. Wygląda jak błąd w UIWebView, ponieważ kiedy uruchomię ten sam kod na Safari/chrome, zdefiniowany jest lineNumber. Powinniśmy zgłosić błąd firmie Apple: https://bugreport.apple.com - im więcej będziemy wypełniać zgłoszenie tego błędu, tym bardziej stanie się on ważny (nie można głosować na błąd, więc zespół Apple traktuje priorytetowo raport o błędach numer duplikatu). – Samuel

+0

Nie jestem pewien, czy to działa dla urządzeń przenośnych, ale użyłem tego w przeszłości: https://github.com/posabsolute/jQuery-Error-Handler-Plugin również włączając tryb debugowania w Mobile Safari i używając console.log ("error wiadomość'); działa również –

+0

Patrząc na kod wtyczki, robi to samo, co powyższy kod (zastępuje onerror kodem e-maili/loguje błąd). Więc nadal otrzymam TypeError: "undefined" nie jest funkcją, linia: undefined. Wypełnię raport o błędzie, a ja będę nadal szukał sposobu na obejście problemu. – Twomz

Odpowiedz

0

Czy słyszałeś o Ripple? Jest to mobilny emulator dla Chrome przeznaczony do testowania aplikacji PhoneGap.

To może pomóc w znalezieniu błędów przed debugowaniem urządzeń.

1

W ostatnich miesiącach przeglądarki rozszerzyły podpis o window.onerror, aby podać więcej informacji.

window.onerror = function(msg, file, line, col, error) { 

    // backwards compat 
    if (!error) { 
    error = new Error(msg); 
    } 

    // send error to your logger 

} 

Powinno to dać więcej informacji. Ale wciąż są rzeczy, w których potrzebujesz lepszego kontekstu. Powinieneś sprawdzić niektóre narzędzia innych firm, takie jak TrackJS, które automatycznie podadzą ci to, plus dodatkowe informacje o tym, jak błąd wystąpił.

Nota prawna: Jestem jednym z autorów TrackJS, więc znam sporo na temat błędów JavaScript :)