我有一个错误记录功能,如下所示:
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) {
我应该在功能定义中更改哪些内容以清除警告?
答案 0 :(得分:0)
Closure Compiler只接受window.onerror
的3个参数。以下是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;
不需要类型信息。以下是我的一些代码中的示例:
/** 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个参数:
您可以尝试将类型转换为3参数版本
您可以使用Closure Compiler项目提交有关它的问题,或在他们的电子邮件列表中询问。
上一个回答:
这是尝试:
/**
* @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个参数,所以这可能仍然是个问题。
答案 1 :(得分:0)
编译器的onerror
签名尚未更新,以符合最新的浏览器规范。你可以发送一个Pull Request来改变它。
大部分用法已改用:
window.addEventListener('error', function(evt) {}, false)
现代浏览器在传递给事件监听器的ErrorEvent object上提供相同的信息。