" null不是一个对象"在n.parentNode.removeChild表达式中

时间:2018-02-05 04:52:59

标签: javascript exception web-applications sentry

问题: 我在生产网页上收到以下错误报告:

TypeErrores6-shim/es6-shim in process
null is not an object (evaluating 'n.parentNode.removeChild')

问题

在最低级别,最可能出现的情况是什么?

  1. nnull(无论n是什么)
  2. n.parentNodenull
  3. argnull
  4. 中为n.parentNode.removeChild(arg)

    更多详细信息(如果相关):

    我们正在使用Sentry错误报告系统报告错误。

    此错误发生在Mobile Safari和Chrome Mobile下。

    源地图似乎已被破坏,因此我不知道错误所指的es6-shim脚本的哪一行(并且很可能是它的es6-shim问题,因为没有出现es6-shim代码中的removeChild)。

1 个答案:

答案 0 :(得分:2)

您可以轻松设置所有三种情况,以确定它是哪种情况(also on jsFiddle):

FILE_UPLOAD_HANDLERS=[
    'django.contrib.staticfiles.finders.MemoryFileUploadHandler',
    'django.contrib.staticfiles.finders.TemporaryFileUploadHandler',
]
var n, p;

console.log("If n were null:")
try {
  n = null;
  n.parentNode.removeChild(null);
} catch (e1) {
  console.log(e1.message);
}

console.log("If parentNode were null:")
try {
  n = document.createElement("div");
  n.parentNode.removeChild(null);
} catch (e2) {
  console.log(e2.message);
}

console.log("If arg were null:")
try {
  p = document.createElement("div");
  n = document.createElement("div");
  p.appendChild(n);
  n.parentNode.removeChild(null);
} catch (e3) {
  console.log(e3.message);
}

当我在移动Chrome上运行时,我看到:

If n were null:
null is not an object (evaluating 'n.parentNode')
If parentNode were null:
null is not an object (evaluating 'n.parentNode.removeChild')
If arg were null:
Argument 1 ('child') to Node.removeChild must be an instance of Node

因此.as-console-wrapper { max-height: 100% !important; } n.parentNode.removeChild(...) n所引用的parentNode引用的对象似乎正在调用null

尽管在es6-shim中报告了错误,但es6-shim本身不太可能出错(正如你所说,es6-shim中没有removeNode);它更可能是从提供给其中一个es6-shim函数的回调中抛出的。