用户突然收到“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 Evaluator
或XPathEvaluator
未定义? (有没有空格?)
实际上没有空间。我从调试中获取的内容很有意义。在其他新闻中:仔细检查了 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
...暗示在 javascript 中 XML 处理 时存在 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 文档的 <head>
:
<meta http-equiv="X-UA-Compatible" content="IE=10" />
这行脚本是强制浏览器以internet-explorer-10模式运行web资源。
警告:缺点是此功能将在 microsoft-edge 中被贬低,这是 Microsoft 新发布的 Internet Explorer 替代品。
【讨论】:
以上是关于用户突然收到“XPath Evaluator is Undefined”错误的主要内容,如果未能解决你的问题,请参考以下文章