用户突然收到“XPath Evaluator is Undefined”错误

Posted

技术标签:

【中文标题】用户突然收到“XPath Evaluator is Undefined”错误【英文标题】:User suddenly getting "XPath Evaluator is Undefined" error 【发布时间】:2014-10-07 05:00:14 【问题描述】:

这是来自我支持的系统的用户的问题。该系统是一个基于网络的企业应用程序。我应该注意我不是它的开发者。我之所以不寻求他们的支持是因为他们之前的支持是“我们不需要解决这个问题,我们只是选择不支持它”,老实说,我怀疑除了他们的开发人员之外的任何人都不会理解问题。

用户正在尝试访问此网页中的功能(具体来说,他们正在尝试为业务参与创建条目)。这个函数会生成一个新窗口,用于创建这个新事物,旁边有多个选项卡可以访问不同的部分。虽然窗口确实打开了,并且选项卡甚至出现了,但默认的“常规”选项卡的页面是空白的,并且中间出现了一个弹出窗口,上面写着“XPath Evaluator is Undefined”。窗口在关闭该错误消息后无响应。

用户拥有 IE 10,升级到 IE 11,然后降级到 IE 10 并正常工作。她说她在 Skype 停止运行之前就安装了它,但在卸载 Skype 后就没有让它再次运行。没有清除缓存或重新启动对她有帮助。我无法在我的机器上使用所有浏览器重新创建问题:

Firefox 33 + FireIE* Firefox 31 + FireIE* IE 11 IE 10** IE 9** IE 8** IE 7** IE 6** 火狐** 铬** 歌剧**

*FireIE 是一个 FF 插件,它基本上模拟了 Firefox 中的 IE。我让它强制 IE 10 标准。

**IE 11 的开发仿真。

问题是她工作站上的某些东西使网页的代码突然出错。关于什么坏了,为什么坏了,以及可能的修复方法的任何想法?按时间顺序,Skype 似乎是罪魁祸首,我对 Skype 随机破坏随机程序并不陌生,但老实说,我不知道 Skype 怎么可能破坏这样的网络应用程序。我也无法在我的调试控制台中找到似乎正在破坏的代码。哎呀,我什至无法弄清楚正在使用哪个版本的 XPath。

编辑:设法获取似乎导致问题的代码:

function getSelectXMLNodes(doc, path)  
    var xpath = new XPathEvaluator(); 
    var result = xpath.evaluate(path, doc, doc.createNSResolver(doc.documentElement), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);  

    var nodeList = new Array(result.snapshotLength); 

    for (var i = 0; i < result.snapshotLength; i++)  
        nodeList[i] = result.snapshotItem(i); 
     
    xpath = null; 
    result = null; 
    return nodeList; 

【问题讨论】:

你能在她的机器(远程桌面什么的)上运行它并在错误发生时查看调试控制台吗?另外,不清楚用户在哪个版本的IE下出现错误? IE 10,我只能在窗口打开并关闭错误后才能进入控制台。但是,我们发现她的问题有一个解决方法:打开调试!只要启动调试,页面就可以正常导航了。调试也时不时让网页崩溃,但只要我到达页面后按F12,调试器就可以工作。 该错误是否实际上表明XPath EvaluatorXPathEvaluator 未定义? (有没有空格?) 实际上没有空间。我从调试中获取的内容很有意义。在其他新闻中:仔细检查了 Skype 的删除无济于事。但是,我能够让 Firefox+FireIE 为她工作。所以代码错误是特定于 IE 的。这很奇怪,因为该函数的标题(对不起,我错过了复制那个)提到代码只能在非 IE 浏览器中使用。 您可能会从***.com/questions/13411818/… 以及链接到那里的重复项中获得有用的信息。 【参考方案1】:

我不知道具体是什么导致它此时停止工作,但从历史上看,IE 一直不支持 XPathEvaluator。

根据this post,“您可以在 DOM 文档对象上使用 selectNode() 和 selectSingleNode() 代替(仅限 IE)。”

【讨论】:

【参考方案2】:

需要将兼容模式更改为 IE 10

只需在 Head 中添加这一行

<meta http-equiv="X-UA-Compatible" content="IE=10" />

清除浏览器缓存并重试!有用! :)

【讨论】:

【参考方案3】:

此错误消息...

ReferenceError: 'XPathEvaluator' is undefined

...暗示在 javascriptXML 处理 时存在 ReferenceError

Professional Javascript for Web Developers一书中作者@nzakas 提到,internet-explorer 浏览器不支持XPathEvaluator。在这种情况下,用户应该在 DOM 文档对象 上使用 selectNode()selectSingleNode()(仅适用于 IE)。


历史

根据文章,在升级到 internet-explorer-11 后,在 Microsoft Dynamics CRM 2011 中经常会观察到 Resolving the Error "XPathEvaluator’ is undefined" 这个 XPathEvaluator is undefined 脚本错误。进一步调查显示,任何包含ClientGlobalContext.js(用于获取父表单的上下文)的html资源都会抛出错误SCRIPT5009: ‘XPathEvaluator’ is undefined


解决方案

解决方案是将以下行添加到引用该特定 JS 文件的自定义 HTML 文档的 &lt;head&gt;

<meta http-equiv="X-UA-Compatible" content="IE=10" />

这行脚本是强制浏览器以internet-explorer-10模式运行web资源。

警告:缺点是此功能将在 microsoft-edge 中被贬低,这是 Microsoft 新发布的 Internet Explorer 替代品。

【讨论】:

以上是关于用户突然收到“XPath Evaluator is Undefined”错误的主要内容,如果未能解决你的问题,请参考以下文章

突然从实体框架中获取异常

尝试授权用户并获取令牌时突然出现 Instagram API“范围”问题 - OAuth

为啥我突然收到错误“无法解析目标'android-9'”?

为啥我突然在 Nuxt 中收到未知单词错误?

为啥发送单个参数的函数调用会突然收到整个元素?

瞬间死机! iPhone/iPad/Mac用户当心这条短信