Closure编译器onerror签名编译

问题描述 投票:0回答:2

我有一个错误记录功能,如下所示:

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) {

我应该在功能定义中更改什么来清除警告?

javascript google-closure-compiler
2个回答
0
投票

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个参数:

  1. 你可以尝试将类型转换为3参数版本
  2. 您可以使用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个参数,所以这可能仍然是个问题。


0
投票

编译器的onerror签名尚未更新,以符合最新的浏览器规范。您可以发送拉取请求以更改此更改。

大多数用法已切换为使用:

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

现代浏览器在传递给事件监听器的ErrorEvent object上提供相同的信息。

© www.soinside.com 2019 - 2024. All rights reserved.