我是javascript的新手,请原谅我的无知。
我目前正在使用SWFAddress为Flex应用程序构建深层链接。问题是浏览器历史记录功能在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个事件,但是当调度其他事件时,它似乎失败了?
答案 0 :(得分:0)
在我看来,问题是对this
的引用:
this.dispatchEvent(new SWFAddressEvent(type));
此部分在事件处理程序中执行,因此不是SWFAddress
,而是Window
。
我将其替换为SWFAddress.dispatchEvent(new SWFAddressEvent(type));
并修复了它 - 悬停我不是JS专家。
前三个事件的生成方式与创建NS_ERROR_ILLEGAL_VALUE
的方式不同。