FireBug Lite messageQueue null
Я пытаюсь заставить FireBug Lite работать с IE7. Учитывая этот код (и ничего больше):
<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"></script>
<link rel="stylesheet" href="../../css/third-party/jquery.ui.all.css">
This is a test!
... Я получаю сообщение об ошибке в строке: 8180, 'this.messageQueue является нулевым или не является объектом', и консоль не появляется.
Если я удалю ссылку на файл CSS, он отлично работает. Кроме того, этот CSS отлично работает с FireBug под FF и GC.
Файл CSS - это недавняя загрузка с веб-сайта jQ и содержит не более 8000 строк (после расширения всех @imports), а также никакой код, доступный для моего веб-сервера, не содержит токен messageQueue.
У меня нет плагинов IE (что я знаю) и никогда не использовали какие-либо продукты MSMQ на этом ПК.
Я также пробовал случайные вещи, такие как переключение порядка инструкций, загрузка jQuery регулярных .js файлов, использование закладки-ярлыка FireBug и т.д., все это безрезультатно.
Любые советы?
Ответы
Ответ 1
Это известная ошибка, которая влияет на IE7 (и IE8) и отслеживается в отслеживании проблем с firebug.
Это все еще проблема на всех каналах (Firebug 1.4 stable/debug/beta/developer).
Отказ от ответственности:. Если вы собираетесь использовать эти методы, подпишитесь на обсуждение этой ошибки и убедитесь, что вы прекратили использовать этот надуманный либо когда он исправлен, либо вышел Firebug 1.5.
Если вам нужно использовать firebug сейчас, вы можете использовать firebug 1.3. Этот метод я нигде не могу найти документально...
<script type="text/javascript"
src="https://getfirebug.com/releases/lite/1.3/firebug-lite.js"></script>
Лучшим подходом было бы использование Firebug 1.3 в качестве букмарклета. Я взломал этот URL-адрес букмарклета на основе архива выпусков firebug:
javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']&&F.documentElement.namespaceURI;E=E?F[i+'NS'](E,'script'):F[i]('script');E[r]('id',b);E[r]('src',I+g+T);E[r](b,u);(F[e]('head')[0]||F[e]('body')[0]).appendChild(E);E=new%20Image;E[r]('src',I+L);})(document,'createElement','setAttribute','getElementsByTagName','FirebugLite','3','releases/lite/1.3/firebug-lite.js','releases/lite/latest/skin/xp/sprite.png','https://getfirebug.com/','#startOpened');
Просто выгрузите его в свою панель ссылок, используя приведенное выше в поле URL.
Ответ 2
Одна из возможных причин: если нет таблиц стилей или данных стиля CSS. Не знаю, почему.
Если CSS отсутствует, и вы видите эту ошибку, добавьте некоторые, и Firebug Lite может снова работать.
Например, этот JSbin с правилом CSS-токена работает с Firebug Lite в IE8:
Код: http://jsbin.com/etecub/5/edit
Этот JSbin, идентичный, но без правил CSS, не удается загружать Firebug Lite в IE8 с ошибкой 'this.messageQueue' is null or not an object
:
Код: http://jsbin.com/etecub/6/edit
Похоже, не имеет значения, действительно ли правило применяется или нет (например, http://jsbin.com/etecub/9 отлично работает). Если у вас есть прикрепленная табличка стилей и все равно видите эту ошибку, и выше не работает, возможно, попробуйте добавить блок <style>
к документу с помощью правила CSS или двух.
Ответ 3
У меня была такая же проблема с Firebug Lite, которая не открывалась с моим приложением Meteor.
После прочтения обсуждений в bugtracker я попробовал debug-версию, которая в основном представляет собой только несжатую версию библиотеки. И да, это имело значение, и Firebug Lite теперь запускается как в Chrome, так и в Safari.
Тег, который я использую прямо сейчас:
<script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>
Ответ 4
Просто увидел ответ, который помог мне отсюда: https://github.com/angular/angular.js/issues/3596. Сам отчет об ошибке находится в репозитории проекта Angular, но он не имеет ничего общего с Angular - проблема для меня проявилась на странице ванили HTML/CSS/JS, а исправлено и работало там.
Цитата оттуда:
firebug-lite-beta.js: 30905 Uncaught TypeError: невозможно прочитать свойство "push" из undefined
Добавление базовой нулевой проверки:
if (typeof this.messageQueue == 'undefined') {
this.messageQueue = [];
}
Кажется, это решение проблемы.