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

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

SCRIPT5007:无法获取属性'ui'的值:对象为null或未定义 ScriptResource.axd?d = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0ff3a1,181

并在javascript中找到错误的链接,向我展示了这些代码位:

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

我对如何解决此错误一无所知。我已经看到了此解决方案,但并不能解决我的问题。

有任何想法吗?

8个解决方案
146 votes

许多JavaScript库(尤其是非最新的JavaScript库)不能很好地处理IE9,因为它在处理很多事情上与IE8中断。

嗅探IE的JS代码在IE9中会经常失败,除非重写此类代码以专门处理IE9。

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

编辑:不能相信,三年后,我们开始使用IE11,并且仍然对此表示赞成。 :-)现在,许多JS库至少应该本机支持IE9,而大多数也应支持IE10,因此,除非您不打算升级JS库,否则这些天不太可能需要meta标签。 但是请注意,IE10会更改有关跨域脚本和某些基于CDN的库代码中断的内容。 检查您的库版本。 例如,CDN上的Dojo 1.9将在IE10上中断,但1.9.1可以解决它。

编辑2:嘿,伙计们,您现在真的需要把自己的举止放在一起。 我们现在在2014年中!!! 我仍然为此投票! 修改您的站点以摆脱旧的IE硬编码依赖项!

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

编辑3:现在快到2016年了。投票还在增加……我想那里还有很多遗留代码……有一天,我们的程序将使我们生存下去……

Stephen Chung answered 2020-08-01T09:06:06Z
12 votes

我在IE9中遇到同样的问题。 我按照上面的答案,并添加了以下行:

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

在我的<head>中就可以了。

savan answered 2020-08-01T09:06:30Z
5 votes

我已经编写了嗅探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) {
    }
};

然后,您要做的就是使用任何条件功能,例如...

即。 sJSON = (Browser() >= BrowserTypes.IE) ? xmlElement.text : xmlElement.textContent;

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

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

有主意吗? 希望这可以帮助。

哦,您可能要记住在发布IE10之后对浏览器()函数进行质量检查,只是为了确认它们没有更改规则。

Justin Russo answered 2020-08-01T09:08:17Z
2 votes

这在IE 11中对我有用:

<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">
fender answered 2020-08-01T09:08:37Z
1 votes

检查结尾是否有逗号。

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

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

这里有一些有关此的讨论:[https://github.com/jeromegn/Backbone.localStorage/issues/55]

Rosdi Kasim answered 2020-08-01T09:09:22Z
-1 votes

好吧,您还应该尝试将Javascript代码添加到函数中,然后在文档主体加载后调用该函数..对我有用:)

Fazi answered 2020-08-01T09:09:42Z
-3 votes

我也面临着同样的问题。

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

<% If Request.IsAuthenticated Then%>
     <table></table>
<%end if%> 
Mazhar Khan answered 2020-08-01T09:10:06Z
translate from https://stackoverflow.com:/questions/5787245/ie9-javascript-error-script5007-unable-to-get-value-of-the-property-ui-obje