The "out of stack space"-error is probably due to the way events are sent up the chain.
As it is the invokeEvent method calls itself recursively, and with many nested layers 
you run out of stack space fast. Seems it happens sooner on the Mac.

This is the current implementation (listeners.js):

DynObject.prototype.invokeEvent=function(type,e,args) {
        if (!e) e=new DynEvent(type,this);
        if (this.hasEventListeners) for(var i=0;i<this.eventListeners.length;i++) {
                e.target=this.eventListeners[i].target;
                this.eventListeners[i].handleEvent(type,e,args);
        }
        if(e.bubble && this.parent) {
                e.preBubbleCode();
                e.src = this.parent;
                this.parent.invokeEvent(type,e,args);   // <- RECURSIVE!
        }
}

New code, skipping recursiveness (untested):

DynObject.prototype.invokeEvent=function(type,e,args) {
        var o = this;
        if (!e) e=new DynEvent(type,o);
        while(o) {
                if(o.hasEventListeners) for(var i=0;i<o.eventListeners.length;i++) {
                        e.target=o.eventListeners[i].target;
                        o.eventListeners[i].handleEvent(type,e,args);
                }
                if(e.bubble && o.parent) {
                        e.preBubbleCode();
                        o = o.parent;
                        e.src = o;
                }
                else
                        break;
        }
}

Should be a little faster too (perhaps noticable when deeply nested). Of course, the 
error being discussed can be due to something else.

/Lunna


At 2001-11-12 14:53, martin ström wrote:
>hm it could be, but i just tested to do a couple of nested for-loops
>that took some time to execute and put it to execute in onunload() 
>and there wasn't any errors, it took time but ie just waited until 
>everything were done and went on.
>
>i belive the DynAPI unloadHandler does too much for ie, 
>maybe it is messing around with memory before fireing onunload 
>and that’s why DynAPI.deleteAllChildren() works when it's not 
>called from onunload. 
>
>i'll looking at this a bit further when i've got the time. 
>
>cheers
>/martin
>
>> -----Original Message-----
>> From: Michael Pemberton [mailto:[EMAIL PROTECTED]] 
>> Sent: den 12 november 2001 13:12
>> To: martin ström
>> Subject: Re: [Dynapi-Dev] Some Mac testing-reports..
>> 
>> 
>> Is it possible that the unload function is taking too long to 
>> execute and IE
>> is trying to move on before the function has finished executing?
>> 
>> martin ström wrote:
>> 
>> > IE5 has some problems when creating or deleting too many layers
>> > (creating more than 62) and shows a js-error ("out of stack space").
>> > this happens as well when unloading the page and more than 23 nested
>> > layers was created. A strange thing I noticed was that if I 
>> created 62
>> > nested
>> > layers (works OK) and manually call 
>> DynAPI.deleteAllChildren()  (which
>> > basically is what the unload-handler does, DynAPI.onUnLoadCodes is
>> > empty)
>> > everything is working fine (no "out of stack space"-errors) 
>> and the page
>> > can
>> > be unloaded without any errors.
>> 
>> --
>> Michael Pemberton
>> [EMAIL PROTECTED]
>> ICQ: 12107010
>> 
>> 
>> 
>
>
>_______________________________________________
>Dynapi-Dev mailing list
>[EMAIL PROTECTED]
>http://www.mail-archive.com/dynapi-dev@lists.sourceforge.net/



_______________________________________________
Dynapi-Dev mailing list
[EMAIL PROTECTED]
http://www.mail-archive.com/dynapi-dev@lists.sourceforge.net/

Reply via email to