我有一个错误记录功能,如下所示:
window.onerror = function (ErrorMsg, Url, LineNumber, Col, Error) { .... }
当我通过Closure Compiler我的代码时,我得到一个警告:
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) {
我应该在功能定义中更改什么来清除警告?
Closure Compiler只接受window.onerror
的3个参数。以下是来自外部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;
不需要类型信息。这是一个在我的一些代码中工作的例子:
/** 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;
}
}
};
如果您需要所有5个参数:
上一个答案:
这是尝试:
/**
* @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;
似乎Closure Compiler只希望有3个参数,所以这可能仍然是个问题。
编译器的onerror
签名尚未更新,以符合最新的浏览器规范。您可以发送拉取请求以更改此更改。
大多数用法已切换为使用:
window.addEventListener('error', function(evt) {}, false)
现代浏览器在传递给事件监听器的ErrorEvent object上提供相同的信息。