#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 для разработки многофункциональных веб-приложений много месяцев назад, поэтому я не могу комментировать, сработает ли это исправление. Тем не менее, я отмечу этот ответ как правильный. Если кто-то придет в будущем с лучшим ответом, то я отмечу это как правильное 🙂