我对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个事件,而在调度其他事件时却似乎失败呢?

最佳答案

在我看来,问题出在以下内容中对this的引用:

this.dispatchEvent(new SWFAddressEvent(type));


这部分是在事件处理程序中执行的,因此它不是SWFAddress,而是Window

我将其替换为SWFAddress.dispatchEvent(new SWFAddressEvent(type));并进行了修复-悬停我不是JS专家。

前三个事件的生成方式与创建NS_ERROR_ILLEGAL_VALUE的事件不同。

关于javascript - 组件返回的失败代码:0x80070057(NS_ERROR_ILLEGAL_VALUE)[nsIDOMEventTarget.dispatchEvent],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7820381/

10-11 14:08