2016-06-28 8 views
0

ich eine Fehlerlogging-Funktion haben, die wie folgt aussieht:Closure Compiler onerror Signatur Compilation

window.onerror = function (ErrorMsg, Url, LineNumber, Col, Error) { .... } 

Wenn ich meinen Code durch Closure Compiler setzen, ich habe eine Warnung erhalten:

JSC_TYPE_MISMATCH: assignment to property onerror of Window 
found : function (?, ?, ?, ?, ?): undefined 
required: (function (string, string, number): ?|null) at line 197 character 1 
    window.onerror = function (ErrorMsg, Url, LineNumber, Col, Error) { 

Was sollte ich Änderung in meiner Funktionsdefinition, um die Warnung zu löschen?

Danke.

Antwort

0

Closure Compiler akzeptiert nur 3 Argumente für window.onerror. Hier ist die Definition aus dem extern w3c_dom1.js:

// onerror has a special signature. 
// See https://developer.mozilla.org/en/DOM/window.onerror 
// and http://msdn.microsoft.com/en-us/library/cc197053(VS.85).aspx 
/** @type {?function (string, string, number)} */ 
Window.prototype.onerror; 

Die Typ-Information ist nicht erforderlich. Hier ist ein Beispiel, das in einigen meiner Code funktioniert:

/** Sets a global error handler function in `window.onerror` to alert user. 
* @return {undefined} 
* @static 
*/ 
UtilityCore.setErrorHandler = function() { 
    window.onerror = function(msg, url, line) { 
    var s = msg + "\n" + url + ":" + line; 
    if (goog.DEBUG) { 
     console.log(s); 
    } 
    if (UtilityCore.numErrors++ < UtilityCore.maxErrors) { 
     alert(s); 
     return true; 
    } 
    } 
}; 

Wenn Sie alle 5 Argumente benötigen:

  1. Sie könnten versuchen, den Typ der 3 Argument Version Casting

  2. Sie können ein Problem mit dem Closure Compiler-Projekt einreichen oder in der E-Mail-Liste nachfragen.


vorherige Antwort:

Hier ist etwas zu versuchen:

/** 
* @param {string} ErrorMsg 
* @param {string} Url 
* @param {number} LineNumber 
* @param {number} Col 
* @param {Object} Error 
*/ 
var errorFn = function (ErrorMsg, Url, LineNumber, Col, Error) { ... } 
window.onerror = errorFn; 

Es scheint, dass Closure Compiler nur dort erwartet 3 Argumente zu sein, so dass die Macht immer noch ein Problem sein.

+0

Versucht es, es fügt die gleiche Warnung hinzu. – frenchie

+0

Das macht Sinn in Anbetracht dessen, was ich herausgefunden habe, siehe aktualisierte Antwort. – owler

+0

Die Onerror-Signatur wurde nicht mit den neuesten Signaturen aktualisiert. Sie können eine Pull-Anfrage senden, um diese Änderung zu erhalten. Die meiste Verwendung hat stattdessen zu 'window.addEventListener ('error', function (evt) {}, false)' gewechselt. Moderne Browser geben dieselben Informationen über das übergebene ErrorEvent-Objekt zurück. –

0

Die onerror-Signatur für den Compiler wurde nicht aktualisiert, um den neuesten Browserspezifikationen zu entsprechen. Sie können eine Pull-Anfrage senden, um diese Änderung zu erhalten.

meisten Nutzung hat Switched:

window.addEventListener('error', function(evt) {}, false) 

Moderne Browser die gleichen Informationen auf dem ErrorEvent object an den Ereignis-Listener übergeben geben.

+0

Ok, hab es, danke. Für die vollständige Copy-Paste-Version von Code habe ich dieses jsfiddle hinzugefügt: https://jsfiddle.net/yr0aoubf/ – frenchie

Verwandte Themen