IE9 Ошибка JavaScript: SCRIPT5007: невозможно получить значение свойства 'ui': объект является нулевым или неопределенным - PullRequest
42 голосов
/ 26 апреля 2011

Мой веб-сайт хорошо работает в Chrome, Firefox и Internet Explorer 8. Но в Internet Explorer 9 возникают очень странные ошибки при наведении курсора на компоненты.

SCRIPT5007: невозможно получить значение свойства 'ui': объект является нулевым или неопределенным ScriptResource.axd? D = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLhff0F0HFF0F0F0F0H0F0F0H0F5

И, следуя по ссылке на ошибку в javascript, показывает мне эти биты кода:

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

Я немного не понимаю, как решить эту ошибку. Я видел это решение, но оно не решило проблему для меня.

Есть идеи?

Ответы [ 8 ]

146 голосов
/ 26 апреля 2011

Многие библиотеки JavaScript (особенно не новые) плохо обрабатывают IE9, потому что он ломает IE8 в обработке многих вещей.

JS-код, который прослушивается для IE, будет довольно часто отказывать в IE9, если только такой код не переписан специально для IE9.

Перед обновлением кода JS вы должны использовать метатег "X-UA-Compatible", чтобы перевести веб-страницу в режим IE8.

РЕДАКТИРОВАТЬ: Не могу поверить, что, 3 года спустя, и мы на IE11, и есть все еще за это. :-) Многие библиотеки JS теперь должны по крайней мере изначально поддерживать IE9 и большинство поддерживают IE10, поэтому вряд ли вам понадобится метатег в эти дни, если вы не собираетесь обновлять свою библиотеку JS. Но имейте в виду, что IE10 меняет вещи, касающиеся междоменных сценариев и некоторых разрывов кода библиотеки на основе CDN. Проверьте версию своей библиотеки. Например, Dojo 1.9 на CDN сломается на IE10, но 1.9.1 решает его.

РЕДАКТИРОВАТЬ 2: Эй, ребята, вы ДЕЙСТВИТЕЛЬНО должны собрать свои действия сейчас. Мы сейчас в середине 2014 года !!! Я ЕЩЕ получаю голоса за это! Пересмотрите свои сайты, чтобы избавиться от жестко закодированных зависимостей старого IE!

Вздох ... Если бы я знал, что это был бы мой самый популярный ответ, я бы, вероятно, потратил бы больше времени на его полировку ...

РЕДАКТИРОВАТЬ 3: Сейчас уже почти 2016 год. Прогнозы все еще набирают обороты ... Я думаю, есть лотов устаревшего кода там ... Однажды наши программы выйдут -живи нас ...

12 голосов
/ 31 октября 2011

У меня была такая же проблема в IE9.Я последовал вышеупомянутому ответу и добавил строку:

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

в моем <head>, и это сработало.

5 голосов
/ 19 октября 2012

Я написал код, который отслеживает 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;

Получите идею? Надеюсь, это поможет.

О, вы, возможно, захотите помнить о QA функции Browser () после выпуска IE10, просто чтобы убедиться, что они не изменили правила.

2 голосов
/ 18 января 2018

Это сработало для меня в IE 11:

<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">
1 голос
/ 17 февраля 2016

проверьте, есть ли запятая в конце.

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

Вы также можете получить эту ошибку, если просматриваете доступ к странице локально (через file:// вместо http://) ..

Здесь есть некоторое обсуждение этого вопроса: https://github.com/jeromegn/Backbone.localStorage/issues/55

0 голосов
/ 06 июня 2012

Я тоже столкнулся с той же проблемой.

Я использовал код ниже на странице .aspx без записи конфигурации аутентификации в файле web.config. После записи настроек в Web.config я могу запустить свой код.

<% If Request.IsAuthenticated Then%>
     <table></table>
<%end if%> 
0 голосов
/ 01 февраля 2012

Что ж, вам также следует попробовать добавить код Javascript в функцию, а затем вызвать функцию после загрузки тела документа ... это сработало для меня:)

...