Компонент вернул код ошибки: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent]

#javascript #swfaddress

#javascript #swfaddress

Вопрос:

Я очень новичок в javascript, поэтому простите меня за мое невежество.

В настоящее время я использую SWFAddress для создания глубоких ссылок для гибкого приложения. Проблема в том, что функция истории браузера не работает в IE9.

Я хотел бы это исправить, и, похоже, это не должно быть сложным исправлением.

Когда я отлаживаю скрипт в Firefox, я получаю это сообщение об ошибке:

 Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent]
this.dispatchEvent(new SWFAddressEvent(type)); 
  

Это указывает на этот фрагмент кода как на виновника:

 _dispatch = function(type) {
            this.dispatchEvent(new SWFAddressEvent(type));
            type = type.substr(0, 1).toUpperCase()   type.substr(1);
            if(typeof this['on'   type] == FUNCTION)
                this['on'   type]();
        },
  

Я проверил и подтвердил, что экземпляр объекта SWFAddressEvent создан правильно без каких-либо проблем.

Проблема, похоже, заключается здесь:

 this.dispatchEvent = function(event) {
    console.log(event);
        if (this.hasEventListener(event.type)) {
        console.log(event);
            event.target = this;
            for (var i = 0, l; l = _listeners[event.type][i]; i  )
                l(event);
            return TRUE;           
        }
        return FALSE;
    };
  

Кажется, что по какой-то причине dispatchEvent не получает SWFAddressEvent то, что было создано.

Может кто-нибудь объяснить, что означает это сообщение об ошибке? И почему при первой загрузке страницы она способна правильно отправлять 3 события, но когда дело доходит до отправки дальнейших событий, кажется, что происходит сбой?

Ответ №1:

Мне кажется, что проблема заключается в ссылке на this в:

 this.dispatchEvent(new SWFAddressEvent(type));
  

Эта часть выполняется в обработчике событий, так что это не SWFAddress , а Window .

Я заменил его на SWFAddress.dispatchEvent(new SWFAddressEvent(type)); и это исправило его — наведите курсор, я не эксперт по JS.

Первые три события генерируются иным способом, чем тот, который создает NS_ERROR_ILLEGAL_VALUE .

Комментарии:

1. Я прекратил использовать swfaddress и flash для разработки многофункциональных веб-приложений много месяцев назад, поэтому я не могу комментировать, сработает ли это исправление. Тем не менее, я отмечу этот ответ как правильный. Если кто-то придет в будущем с лучшим ответом, то я отмечу это как правильное 🙂