Използвам следния шаблон в IE11 и не мога да разбера защо страничната лента се включва всеки път, когато се извършва навигация. Когато инструментите за разработчици са отворени, той се държи както бих искал. Лесно се демонстрира чрез щракване върху който и да е от разделите под UI елемент в дървото, докато работи IE11. Въпреки това ще забележите, че ако инструментите за разработчици F12 са отворени, страничната лента не се плъзга при всяко навигиране. Това не е проблем в Chrome. Има грешка с fastclick, която може да се появи, но работих без fastclick и все още се случва. Всяка помощ би била чудесна. Благодаря. https://almsaeedstudio.com/themes/AdminLTE/pages/UI/general.html
Сайтът се държи по различен начин, когато инструментите за разработчици са отворени IE11
Отговори (6)
Опитайте да премахнете console.log()
от кода си.
console.log()
, който трябва да помогне при отстраняване на грешки в Javascript, може да накара IE напълно да спре обработката на скриптове на страницата. За да добавите към мистерията, ако продължите да гледате страницата си в IE с отворени инструменти за разработка - изобщо няма да забележите проблем.
Обяснение
Причината за това е, че конзолният обект не се инстанцира, освен ако инструментите за разработка не са отворени в IE. В противен случай ще видите едно от двете неща:
- Javascript няма да се изпълни правилно
- Конзолата има криптични грешки, като например „обектът е недефиниран“ или други от този характер
Девет пъти от десет имате грешка console.log някъде в кода. Това не засяга никой друг браузър освен IE.
if (!window.console) { window.console = {}; window.console.log = function () { } };
- person storsoc; 03.03.2017
Друга потенциална причина, особено ако извършвате ajax повиквания, е, че отговорът на ajax може да бъде кеширан, когато инструментите за разработка са затворени, но обновен от сървъра, когато инструментите за разработка са отворени.
В IE отворете раздела Мрежа на Инструменти за разработчици, щракнете върху иконата за възпроизвеждане и деактивирайте бутона Винаги опреснявай от сървър. След това наблюдавайте дали някое от вашите ajax обаждания се връща с код за отговор 304 (непроменен). Ако са, тогава не получавате свежи данни от сървъра и трябва да актуализирате настройките за кеширане на страницата, която се извиква чрез ajax.
Добавяйки към вече страхотните отговори (тъй като не мога да коментирам - изисква 50 повторения точки), съгласен с отговора от @sam100rav и коментара от @storsoc, открих, че в IE11 версия 11.1387.15063.0
с актуализирана версия 11.0.90
(KB4462949), че window.console
наистина съществува като празен обект (window.console = {}
). Следователно използвах вариант на polyfill от @storsoc, както е показано по-долу.
if (!window.console || Object.keys(window.console).length === 0) {
window.console = {
log: function() {},
info: function() {},
error: function() {},
warn: function() {}
};
}
Както вече беше посочено, защото IE11 + Edge‹=16 е толкова глупав, че не поддържа console
освен ако инструментите за разработчици не са отворени... Така че, ако отворите това, за да деактивирате кеширането, няма да видите някакви проблеми и може да си помислите, че проблемът се дължи само на кеша на браузъра... но не.. :@
Направих този "polyfill" за него (всъщност не прави polyfill, но кара IE да не извежда никакви грешки). Добавете го възможно най-рано на вашия сайт, тъй като всеки js може да използва console.log
или console.warn
и т.н.
window.console = typeof window.console !== 'object' || {};
console.warn = typeof console.warn === 'function' || function () {
return this;
};
console.log = typeof console.log === 'function' || function () {
return this;
};
console.info = typeof console.info === 'function' || function () {
return this;
};
console.error = typeof console.error === 'function' || function () {
return this;
};
console.assert = typeof console.assert === 'function' || function () {
return this;
};
console.dir = typeof console.dir === 'function' || function () {
return this;
};
console.table = typeof console.table === 'function' || function () {
return this;
};
console.group = typeof console.group === 'function' || function () {
return this;
};
console.groupEnd = typeof console.groupEnd === 'function' || function () {
return this;
};
console.time = typeof console.time === 'function' || function () {
return this;
};
console.timeEnd = typeof console.timeEnd === 'function' || function () {
return this;
};
console.timeLog = typeof console.timeLog === 'function' || function () {
return this;
};
console.trace = typeof console.trace === 'function' || function () {
return this;
};
console.clear = typeof console.clear === 'function' || function () {
return this;
};
console.count = typeof console.count === 'function' || function () {
return this;
};
console.debug = typeof console.debug === 'function' || function () {
return this;
};
console.dirxml = typeof console.dirxml === 'function' || function () {
return this;
};
console.groupCollapsed = typeof console.groupCollapsed === 'function' || function () {
return this;
};
Предполагам, че сте поправили това, откакто сте го публикували, тъй като не мога да видя поведението, което описвате във връзката си.
Наскоро обаче се сблъсках с подобен проблем, при който отворените инструменти за разработка промениха поведението не поради проблеми с конзолата, а защото отварянето на инструментите промени ширината на прозореца. Разликата в ширината на прозореца предизвика основна грешка в моя случай.
Свързана публикация тук.