IE9 Ошибка JavaScript: SCRIPT5007: невозможно получить значение свойства "ui": объект имеет значение null или undefined
Мой сайт хорошо работает в Chrome, Firefox и Internet Explorer 8. Но в Internet Explorer 9 очень странные ошибки запускаются при простое зависание компонентов.
SCRIPT5007: Невозможно получить значение свойства "ui": объект имеет значение null или undefinedScriptResource.axd? D = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0o55K0 & t = ffffffffd37cb3a1, строка 181 символ 1914
И после ссылки на ошибку в javascript мне показывают эти биты кода:
onNodeOver:function(B,A){A.ui.onOver(B)},onNodeOut:function(B,A){A.ui.onOut(B)}
Я немного понимаю, как решить эту ошибку.
Я видел это решение, но это не решило проблему для меня.
Любые идеи?
Ответы
Ответ 1
Многие библиотеки 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!
Вздох... Если бы я знал, что это будет, безусловно, самый популярный ответ, я бы, наверное, потратил больше времени на его полировку...
EDIT 3: Сейчас уже почти 2016. Upvotes все еще тикает... Я думаю, есть много устаревшего кода... Однажды наши программы выйдут из-за нас..
Ответ 2
У меня была такая же проблема в IE9. Я выполнил вышеупомянутый ответ, и я добавил строку:
<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />
в моем <head>
, и он сработал.
Ответ 3
Я написал код, который нюхает IE4 или выше и в настоящее время отлично работает на сайтах для моих корпоративных клиентов, а также на моих личных сайтах.
Включите следующие перечисляемые константные и функциональные переменные в файл include 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, просто чтобы убедиться, что они не изменили правила.
Ответ 4
проверьте, есть ли запятая в конце.
},
{
name: 'МОФ. Перелив из баков. м3/ч',
data: graph_high3,
dataGrouping: {
units: groupingUnits,
groupPixelWidth: 40,
approximation: "average",
enabled: true,
units: [[
'minute',
[1]
]]
}
} // if , - SCRIPT5007
Ответ 5
Это сработало для меня в IE 11:
<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">
Ответ 6
Вы также можете получить эту ошибку, если вы просматриваете доступ к странице локально (через file://
вместо http://
)..
Здесь есть некоторые обсуждения: https://github.com/jeromegn/Backbone.localStorage/issues/55
Ответ 7
Ну, вы также должны попробовать добавить Javascript-код в функцию, а затем вызвать функцию после того, как тело документа было загружено. Это сработало для меня:)
Ответ 8
Я тоже столкнулся с той же проблемой.
Я использовал код ниже на странице .aspx без записи конфигурации аутентификации в файле web.config. После записи настроек в Web.config я могу запустить свой код.
<% If Request.IsAuthenticated Then%>
<table></table>
<%end if%>