IE9 JavaScript 错误:SCRIPT5007:无法获取属性“ui”的值:对象为空或未定义
Posted
技术标签:
【中文标题】IE9 JavaScript 错误:SCRIPT5007:无法获取属性“ui”的值:对象为空或未定义【英文标题】:IE9 JavaScript error: SCRIPT5007: Unable to get value of the property 'ui': object is null or undefined 【发布时间】:2011-08-12 20:02:37 【问题描述】:我的网站在 Chrome、Firefox 和 Internet Explorer 8 上运行良好。但在 Internet Explorer 9 上,当鼠标悬停在组件上时会触发非常奇怪的错误。
SCRIPT5007:无法获取属性“ui”的值:对象为 null 或未定义 ScriptResource.axd?d=sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0o55K0&t=ffffffffd37cb3a1,第181行字符1914
点击 javascript 中的错误链接,我会看到这些代码:
onNodeOver:function(B,A)A.ui.onOver(B),onNodeOut:function(B,A)A.ui.onOut(B)
我对如何解决这个错误有点不知所措。 我见过this 解决方案,但这并没有解决我的问题。
有什么想法吗?
【问题讨论】:
许多 JavaScript 库(尤其是非最近的库)不能很好地处理 IE9,因为它在处理很多事情时与 IE8 不同。嗅探 IE 的 JS 代码在 IE9 中会经常失败,除非重写此类代码以专门处理 IE9。在更新 JS 代码之前,您应该使用“X-UA-Compatible”元标记来强制您的网页进入 IE8 模式。 非常感谢,这解决了我的问题。提供该评论作为答案,我会接受。 好的。我已经发布了答案。 :-) 【参考方案1】:许多 JavaScript 库(尤其是非最近的库)不能很好地处理 IE9,因为它在处理很多事情时与 IE8 不同。
嗅探 IE 的 JS 代码在 IE9 中会经常失败,除非重写此类代码以专门处理 IE9。
在更新JS代码之前,你应该使用“X-UA-Compatible”元标记来强制你的网页进入IE8模式。
编辑: 不敢相信,3 年后,我们进入了 IE11,但仍有人对此表示赞同。 :-) 许多 JS 库现在应该至少原生支持 IE9,并且大多数都支持 IE10,所以这些天你不太可能需要元标记,除非你不打算升级你的 JS 库。但请注意,IE10 改变了有关跨域脚本和一些基于 CDN 的库代码中断的事情。检查您的库版本。比如CDN上的Dojo 1.9会在IE10上崩溃,但是1.9.1解决了。
编辑 2:您真的现在需要齐心协力。我们现在是 2014 年年中!!!我仍然为此投票!修改您的网站以摆脱旧的 IE 硬编码依赖项!
唉...如果我知道这将是迄今为止我最受欢迎的答案,我可能会花更多时间来完善它...
编辑 3: 现在快 2016 年了。赞成票仍在增加...我猜那里有 很多 遗留代码...有一天我们的程序会比我们活得更久……
【讨论】:
我有一个可以在 IE9 本地运行的 web 应用程序,但是当移动到服务器时,我在原始帖子中遇到了错误。这解决了!谢谢! 是的,许多网站在没有强制兼容模式的情况下都存在 IE9 问题。库似乎是这些错误的罪魁祸首,但至少我们可以通过 X-UA-Compatible 元标记以最小的努力强制兼容。尽管如此,当像我这样的人喜欢确保一切正常而不必运行兼容模式时,它并没有真正的帮助。这意味着,像我这样的人必须调试我们的脚本以查看 IE9 的问题所在。好消息是,在我们找出常见问题和错误之后,编写未来完全兼容的脚本将是一件轻松的事情。 好的,那么除了设置那个糟糕的元标记之外,如何更新 js 代码使其在 IE9 中工作?在某些情况下,设置元标记不是一种选择。 大多数 JavaScript 库现已更新以支持 IE9+。只需升级到最新版本的库,去掉元标记,Bob 就是你的叔叔。 迄今为止我在 *** 中发现的最佳编辑历史 )))【参考方案2】:我在 IE9 中遇到了同样的问题。我按照上面的答案添加了一行:
<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />
在我的<head>
中,它起作用了。
【讨论】:
我试图在我的jsp页面中包含exporting.src.js
,我在<head>
中添加了<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />
标签,但问题仍然存在于IE9中。有人可以帮忙吗?应该怎么做才能避免呢?【参考方案3】:
好吧,您还应该尝试将 Javascript 代码添加到函数中,然后在加载文档正文后调用该函数..它对我有用 :)
【讨论】:
【参考方案4】:我也面临同样的问题。
我在 .aspx 页面中使用下面的代码,而没有在 web.config 文件中编写身份验证配置。在 Web.config 中编写设置后,我就可以运行我的代码了。
<% If Request.IsAuthenticated Then%>
<table></table>
<%end if%>
【讨论】:
【参考方案5】:我编写的代码可以嗅探 IE4 或更高版本,目前在我公司客户的网站以及我自己的个人网站中运行良好。
将以下枚举常量和函数变量包含到您页面上的 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)
;
那么您所要做的就是使用任何条件功能,例如...
即。 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;
明白了吗?希望这会有所帮助。
哦,您可能需要记住在 IE10 发布后对 Browser() 函数进行 QA,只是为了验证它们没有更改规则。
【讨论】:
【参考方案6】:如果您正在查看本地访问页面(通过file://
而不是http://
),您也可能会收到此错误..
这里有一些讨论:https://github.com/jeromegn/Backbone.localStorage/issues/55
【讨论】:
【参考方案7】:检查末尾是否有逗号。
,
name: 'МОФ. Перелив из баков. м3/ч',
data: graph_high3,
dataGrouping:
units: groupingUnits,
groupPixelWidth: 40,
approximation: "average",
enabled: true,
units: [[
'minute',
[1]
]]
// if , - SCRIPT5007
【讨论】:
我受到了您的解决方案的启发,然后我最好检查一下我的 JS 缩进真的很差(由其他人编写)。所以我正确缩进了JS代码并且错误消失了。你知道我在强迫 X-UA = IE11【参考方案8】:这在 IE 11 中对我有用:
<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">
【讨论】:
以上是关于IE9 JavaScript 错误:SCRIPT5007:无法获取属性“ui”的值:对象为空或未定义的主要内容,如果未能解决你的问题,请参考以下文章
SCRIPT5:访问被拒绝。在 IE 上使用 parse.js