Проблемы с JavaScript в Firefox 9 - PullRequest
       32

Проблемы с JavaScript в Firefox 9

0 голосов
/ 06 января 2012

Кто-нибудь еще видел странные проблемы с JavaScript в Firefox 9?У нас есть две проблемы.

В первом случае оператор instanceof возвращает false, когда он должен возвращать true.Когда я проверяю с помощью Firebug, переменная определенно соответствует ожидаемой, но возвращает false.Однако, если я добавлю дополнительные точки останова в своем коде, он вернет true.Я ничего не могу сделать иначе, кроме добавления дополнительных точек останова, и он начнет работать.

В другом случае мы создали переменную, ограниченную областью действия внутри функции, к которой затем осуществляется глобальный доступ.Примерно так (обратите внимание, что мы используем YUI 2 для создания глобального пространства имен):

YAHOO.namespace("MyNS");

(function() {
  var _panel;

  YAHOO.MyNS.showPanel = function() {
    if (!_panel) {
      // code to create _panel
      _panel = new YAHOO.widget.Panel(...);
    }
    _panel.show();
  };

  YAHOO.MyNS.hidePanel = function() {
    if (_panel && _panel !== null && _panel.cfg.getProperty("visible")) {
      _panel.hide();
    }
  };
})();

На моей отдельной странице YAHOO.MyNS.showPanel () работает нормально, но потом, когда я позже позвоню YAHOO.MyNS.hidePanel (), происходит сбой, потому что _panel не определена.Если я помещу точку останова в firebug как в методах showPanel (), так и в hidePanel (), то _panel не будет неопределенным.

Мы в тупике.Поскольку это новая функция, я попытался отключить функцию вывода типов в Firefox, чтобы увидеть, если это что-то изменило, а это не так.

Ответы [ 2 ]

0 голосов
/ 06 января 2012

Вы не можете слепо доверять console.log, потому что он может показать вам объект через некоторое время после того, как вы выполните вызов. Google Chrome также страдает от этого. Вы можете заметить это только в Firefox 9, потому что движок JavaScript работает быстрее.

Это не решит вашу ошибку, но может объяснить странное поведение.

Я бы посоветовал вам сделать чек более явным. Инициализируйте _panel до null или false и проверьте это. Если new YAHOO.widget.Panel(...) может вернуть что-то иное, чем объект Panel, то также проверьте это.

На первый взгляд ваш код выглядит нормально, возможно, вы удалили ошибку из выдержки?

0 голосов
/ 06 января 2012

Прошло много времени с тех пор, как я использовал YUI, не говоря уже о YUI2, но я не знаю, является ли это специфической проблемой FireFox 9, и если это возможно, то это не ошибка FireFox 9.

Было бы лучше создать объект Panel с внутренней ссылкой на себя и набор методов show и hide, а затем присоединить его к пространству имен - по крайней мере, тогда вам не нужно беспокоиться о том, что проблема заключается в том, что ты закрываешься.

...