document.createElement 返回 'undefined'

document.createElement returning 'undefined'

我在开发一个基于 Vaadin 8 的应用程序。在几个难以描述的场景中——而且我还无法隔离触发因素——document.createElement 在所有调用中开始变为 return undefined。这在 IE11 和 Chrome 中都可以看到(但每种情况下的情况不同)。我的第一个理论是它可能是浏览器内存不足的问题,但我创建了一个包含更多 DOM 元素的场景,但没有重现该错误,并且内存分析显示在点问题发生。此外,当它发生时,它发生在一个可预测的时间点 - 随机性不足以成为那种环境问题。

当问题发生时,控制台会报告 document.createElement 函数的异常状态 - 它看起来 'broken',但似乎并没有被其他函数或其他东西破坏。以下是正常情况下控制台显示的内容:

...虽然这是问题发生后显示的内容(加上对文档中不存在的属性的引用,以说明它与 createElement 显示的内容之间的区别):

在 Chrome 中,控制台中的行为类似于:

有没有人在任何浏览器中看到过这样的症状and/or是否有任何洞察力来追踪原因?

编辑 2018 年 1 月 17 日:当我最初写这篇文章时,我只目睹了 IE11 中的问题行为。从那时起,我在 Chrome.

中看到了不同情况下的相同行为

我的问题是 document.createElement 被一些我不知道的(错误的)注入反网络钓鱼 JS 所取代。那个 JS 的问题超出了这个问题的范围,但是在问题的评论中提供的调试技巧对于追踪它很有价值:

  1. document.createElement 被隐藏的事实是通过注意到 document.hasOwnProperty('createElement') 返回 true 发现的。
  2. document.createElement 定义一个触发调试器的 setter 函数帮助我找到了有问题的代码。我使用了上面的 break-on-access snippet for this purpose, but also see simple code in 作为自己动手的替代方法。