IE9 JavaScript错误:SCRIPT5007:无法获取属性'ui'的值:object为null或undefined

时间:2011-04-26 07:26:18

标签: javascript asp.net internet-explorer-9

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

  

SCRIPT5007:无法获取属性'ui'的值:object为null或undefined   ScriptResource.axd?d = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0o55K0& t = ffffffffd37cb3a1,181行character 1914

在javascript中出现错误链接后,我会看到这些代码:

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

我对如何解决这个错误有点无能为力。 我见过this解决方案,但这并没有为我解决问题。

任何想法?

8 个答案:

答案 0 :(得分:145)

许多JavaScript库(尤其是非最近的库)不能很好地处理IE9,因为它在处理很多事情时会破坏IE8。

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

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

编辑:无法相信,3年之后我们又进入了IE11,并且仍然有选票。 :-)现在许多JS库至少应该支持IE9,并且大多数都支持IE10,所以现在你不太可能需要meta标签,除非你不打算升级你的JS库。但请注意,IE10会改变跨域脚本和一些基于CDN的库代码中断的内容。检查您的库版本。例如,CDN上的Dojo 1.9将在IE10上中断,但1.9.1会解决它。

编辑2:嘿,伙计们,你真的现在需要一起行动。我们现在在2014年中期!我 STILL 为此获得了投票!修改您的网站以摆脱旧的IE硬编码依赖项!

叹息......如果我知道这是迄今为止我最受欢迎的答案,我可能会花更多的时间对它进行抛光......

编辑3:现在差不多是2016年.Browvotes仍在嘀咕......我猜那里有很多遗留代码...有一天我们的节目会超过我们......

答案 1 :(得分:12)

我在IE9中遇到了同样的问题。我按照上面的回答添加了一行:

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

在我的<head>中,它有效。

答案 2 :(得分: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发布后继续QA the Browser()函数,只是为了验证它们没有改变规则。

答案 3 :(得分:1)

检查最后是否有逗号。

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

答案 4 :(得分:1)

这在IE 11中适用于我:

<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">

答案 5 :(得分:0)

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

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

答案 6 :(得分:-1)

好吧,你也应该尝试将Javascript代码添加到一个函数中,然后在文档正文加载后调用该函数..这对我有效:)

答案 7 :(得分:-3)

我也面临同样的问题。

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

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