IE9 JavaScript错误:SCRIPT5007:无法获取属性“ui”的值:对象为null或未定义

我的网站在Chrome,Firefox和Internet Explorer 8上运行良好。但是,在Internet Explorer 9上,当将鼠标hover在组件上时,会触发非常奇怪的错误。

SCRIPT5007:无法获取属性“ui”的值:对象为null或未定义ScriptResource.axd?d = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0o55K0&t = ffffffffd37cb3a1,line 181 character 1914

和下面的JavaScript错误的链接显示我的这些代码位:

onNodeOver:function(B,A){A.ui.onOver(B)},onNodeOut:function(B,A){A.ui.onOut(B)} 

对于如何解决这个错误,我有点无知。 我已经看到了这个解决scheme,但是这并没有解决我的问题。

有任何想法吗?

许多JavaScript库(尤其是非最近的)不能很好地处理IE9,因为它在处理很多事情时都与IE8打交道。

在IE9中嗅探IE的JS代码会比较频繁地失败,除非这样的代码被重写来专门处理IE9。

在JS代码更新之前,您应该使用“X-UA-Compatible”元标记强制您的网页进入IE8模式。

编辑:不能相信,3年后,我们到了IE11,而且还有这个票。 :-)许多JS库现在应该至less支持IE9本地支持IE10,所以现在不太可能需要元标记,除非你不打算升级你的JS库。 但是请注意,IE10会改变有关跨域脚本和一些基于CDN的库代码中断的事情。 检查你的图书馆版本。 例如,CDN上的Dojo 1.9将打破IE10,但是1.9.1解决了这个问题。

编辑2:嘿,伙计们,你现在真的需要把你的行为联系在一起。 我们现在在2014年中期! 我仍然为此起价 ! 修改您的网站摆脱旧的IE硬编码的依赖关系!

叹息……如果我知道这是我最受欢迎的答案,那么我可能会花更多的时间去研究它…

编辑3:现在是差不多2016年了。upvotes仍然滴答作响…我想有很多遗留的代码在那里…有一天,我们的计划将超出我们… …

我在IE9有同样的问题。 我跟着上面的答案,我加了一行:

 <meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" /> 

在我的<head> ,它的工作。

我已经编写了嗅探IE4或更高版本的代码,目前在我公司客户的网站以及我自己的个人网站上运行良好。

将以下列举的常量和函数variables包含到页面上的JavaScript包含文件中。

 //methods var BrowserTypes = { Unknown: 0, FireFox: 1, Chrome: 2, Safari: 3, IE: 4, IE7: 5, IE8: 6, IE9: 7, IE10: 8, IE11: 8, IE12: 8 }; var Browser = function () { try { //declares var type; var version; var sVersion; //process switch (navigator.appName.toLowerCase()) { case "microsoft internet explorer": type = BrowserTypes.IE; sVersion = navigator.appVersion.substring(navigator.appVersion.indexOf('MSIE') + 5, navigator.appVersion.length); version = parseFloat(sVersion.split(";")[0]); switch (parseInt(version)) { case 7: type = BrowserTypes.IE7; break; case 8: type = BrowserTypes.IE8; break; case 9: type = BrowserTypes.IE9; break; case 10: type = BrowserTypes.IE10; break; case 11: type = BrowserTypes.IE11; break; case 12: type = BrowserTypes.IE12; break; } break; case "netscape": if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { type = BrowserTypes.Chrome; } else { if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) { type = BrowserTypes.FireFox } }; break; default: type = BrowserTypes.Unknown; break; } //returns return type; } catch (ex) { } }; 

那么你所要做的就是使用任何条件function,如…

即。 value = (Browser() >= BrowserTypes.IE) ? node.text : node.textContent;

WindowWidth = (((Browser() >= BrowserTypes.IE9) || (Browser() < BrowserTypes.IE)) ? window.innerWidth : document.documentElement.clientWidth);

或者sJSON = (Browser() >= BrowserTypes.IE) ? xmlElement.text : xmlElement.textContent; sJSON = (Browser() >= BrowserTypes.IE) ? xmlElement.text : xmlElement.textContent;

明白了吗? 希望这可以帮助。

呵呵,IE10发布之后,你可能想把它留在QA的Browser()函数中,只是为了validation它们没有改变规则。

检查最后是否有逗号。

  }, { name: 'МОФ. Перелив из баков. м3/ч', data: graph_high3, dataGrouping: { units: groupingUnits, groupPixelWidth: 40, approximation: "average", enabled: true, units: [[ 'minute', [1] ]] } } // if , - SCRIPT5007 

那么,你也应该尝试添加到一个函数的Javascript代码,然后在文档正文加载后调用函数..它为我工作:)

如果您正在查看本地访问页面(通过file://而不是http:// ),则也可能会出现此错误。

这里有一些讨论: https : //github.com/jeromegn/Backbone.localStorage/issues/55

我也面临同样的问题。

我在.aspx页面中使用了下面的代码,而没有在web.config文件中写入authenticationconfiguration。 在Web.config中写入设置后,我可以运行我的代码。

 <% If Request.IsAuthenticated Then%> <table></table> <%end if%>