document.createElement返回“未定义”

时间:2019-01-15 18:34:31

标签: javascript google-chrome internet-explorer vaadin vaadin8

我正在研究基于Vaadin 8的应用程序。在几个难以描述的场景中-并且我无法隔离触发因素-Sub ConnectToOracleViaADO() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim myResult As String Set cn = New ADODB.Connection cn.ConnectionString = "{Microsoft ODBC for Oracle};Server=myServerAddress; _ Uid=myUsername;Pwd=myPassword;" cn.ConnectionTimeout = 5 cn.Open If cn.State <> adStateOpen Then MsgBox "Sorry, couldn't open database connection.", _ vbCritical + vbOKOnly, "Error" Exit Sub End If cn.CommandTimeout = 1 Set rs = New ADODB.Recordset rs.Open Source:="SELECT something;", _ ActiveConnection:=cn, _ CursorType:=adOpenStatic, _ LockType:=adLockReadOnly, _ Options:=adCmdUnspecified myResult = rs.Fields(0).Value rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub 开始在所有通话中返回document.createElement。在IE11和Chrome中都可以看到这种情况(但在每种情况下情况都不同)。我的第一个理论是,这可能是浏览器内存不足的问题,但是我创建了一个场景,其中包含更多无法重现该错误的DOM元素,并且内存分析在问题发生时没有显着的内存使用高峰。此外,当它发生时,它是在可预测的时间点-不够随机,不会成为那种环境问题。

发生问题时,控制台报告undefined函数的状态为奇数-看起来“坏了”,但似乎没有被其他函数或其他东西所破坏。以下是控制台在正常情况下显示的内容:

Normal createElement in IE11

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

Broken createElement in IE11

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

Broken createElement in Chrome

有人在任何浏览器中都看到过这种症状吗?和/或在寻找原因方面没有任何见识?

编辑2018年1月17日:当我最初写这篇文章时,我只目睹了IE11中的问题行为。从那以后,我在不同的情况下在Chrome中看到了相同的行为。

1 个答案:

答案 0 :(得分:0)

我的问题是document.createElement被一些我不知道的(笨拙)注入的反网络钓鱼JS所代替。 JS的问题不在此问题的范围内,但是对该问题的注释中提供的调试技巧对于跟踪该问题很有价值:

  1. 注意到document.createElement返回了document.hasOwnProperty('createElement'),发现了true被遮盖的事实。
  2. document.createElement定义一个触发调试器的setter函数可以帮助我追踪有问题的代码。为此,我使用了break-on-access代码段,但在上面的this comment中也看到了简单的代码,可以自己动手做。