Tuxedo wrote:
Quote:
Is it possible to add a function call to the onUnload event handler from an
external js file, or can this only be done via the body tag?
>
You can use window.onunload:
window.onunload = rainbow;
function rainbow() {
confirm("Do you like Ritcie Blackmore?");
}
Quote:
In any case, I presume there can only exist one onUnload event handler,
which can naturally include any number of function calls.
>
Yes, but you could also use addEventListener and attachEvent
addEventListener('unload', rainbow, true);
You can detect this with:-
if(window.attachEvent) {
attachEvent("onunload", rainbow);
} else if(window.addEventListener) {
attachEvent("unload", rainbow, true);
}
Quote:
I have instances of html pages, with an existing onUnload event handlers
and those without.
>
I'd like to cover both instances, if possible, so that if there is an
onUnload call already defined in the body tag, to attach or add a function
to that existing event handler, while if there is none, create the onUnload
event handler via a js file, along with some function it should launch.
>
In other words, if 'page1.html' already contains ..
<body onUnload="some_function()">
.. while if 'page2.html' contains only <bodywithout an onUnload call, and
if both pages shares a one and same external 'include.js' file with
some_other_function(); to be called onUnload, can: 1) the result for
page1.html be made to do the same as if the following was hardcoded in the
body tag:
<body onUnload="some_function();some_other_function();">
>
You could use an Event Registry to add/remove legacy onunload handler.
It would be simpler to use attachEvent/ addEventListener pair.
Quote:
But in case of page2.html, the result would be the same as if this alone
was in the body tag:
<body onUnload="some_other_function();">
>
I guess this would be a kind of dymanic event handler and function
depending on whether or not the onOnload handler exists in the body tag
already before. Is this at all possible?
>
That's what an Event Registry would handle. An Event Registry leverages
the fact that functions are objects that can be passed around. Like:-
var oldeventhandler = obj[type];
obj[type] = function(e) {
oldeventhandler(obj, e);
newhandler.call(obj, e);
};
- but a Registry would keep the object's event handlers in an array.
There is a wrapper that has the object, an event type, and a callstack.
The wrapper adds a callback to the object for that event type (obj[type]
= fireEvent());.
fireEvent is a function that returns a function. It does this to take
advantage of enclosing scope.
I wrote an article about that very subject here:-
http://dhtmlkitchen.com/?category=/u...ication-System
But for your case, you might not need all that, in which case a simple
attachEvent/addEventListener pair would work.
Garrett