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

IT技术 javascript asp.net internet-explorer-9
2021-01-29 08:15:05

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

SCRIPT5007:无法获得属性 'UI' 的值:对象为空或未定义的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)}

我对如何解决这个错误有点无能为力。我已经看到了这个解决方案,但这并没有解决我的问题。

有任何想法吗?

6个回答

许多 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 应用程序,但是当移动到服务器时,我遇到了原始帖子中的错误。这修复了它!谢谢!
2021-03-16 08:15:05
是的,许多站点在没有强制兼容模式的情况下都存在 IE9 问题。库似乎是这些错误的罪魁祸首,但至少我们可以通过 X-UA-Compatible 元标记以最小的努力强制兼容性。尽管如此,当像我这样的人喜欢确保一切正常而不必运行兼容模式时,它并没有真正的帮助。这意味着,像我这样的人必须调试我们的脚本以查看 IE9 有什么问题。好消息是,在我们找出常见问题和错误之后,编写未来完全兼容的脚本将是在公园里散步。
2021-03-18 08:15:05
大多数 JavaScript 库现已更新为支持 IE9+。只需升级到最新版本的库,去掉元标记,鲍勃就是你的叔叔。
2021-03-27 08:15:05
好的,那么除了设置那个蹩脚的元标记之外,如何更新 js 代码以使其在 IE9 中工作?在某些情况下,设置元标记不是一种选择。
2021-04-01 08:15:05
迄今为止我在 Stackoverflow 中找到的最佳编辑历史 )))
2021-04-02 08:15:05

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

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

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

我试图包含exporting.src.js在我的 jsp 页面中,我在<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />里面添加了标签<head>,但问题在 IE9 中仍然存在。有人可以帮忙吗?应该怎么做才能避免它?
2021-04-10 08:15:05

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

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

IE。 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,只是为了验证他们没有改变规则。

这在 IE 11 中对我有用:

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

检查末尾是否有逗号。

                            },
                            {
                                name: 'МОФ. Перелив из баков. м3/ч',
                                data: graph_high3,
                                dataGrouping: {
                                    units: groupingUnits,
                                    groupPixelWidth: 40,
                                    approximation: "average",
                                    enabled: true,
                                    units: [[
                                            'minute',
                                            [1]
                                        ]]
                                }
                            }   // if , - SCRIPT5007
我受到了你的解决方案的启发,然后我最好检查一下我的 JS 缩进,它真的很糟糕(由其他人编写)。所以我正确地缩进了 JS 代码并且错误消失了。你知道我在强迫 X-UA = IE11
2021-03-26 08:15:05