usando jQuery que puede hacer uso data("events")
en cualquier objeto (en este caso la ventana):
var hasbeforeunload = $(window).data("events") && $(window).data("events").['beforeunload'];
Pero esto sólo funciona para los eventos de jQuery añadido.
En un caso más general, simplemente debe almacenar la información que se agrega un oyente en alguna parte:
var addedListeners = {};
function addWindowListenerIfNone(eventType, fun) {
if (addedListeners[eventType]) return;
addedListeners[eventType] = fun;
window.addEventListener(eventType, fun);
}
Creo que hay una manera estándar en javascript para obtener los controladores de eventos existentes. A lo sumo se podría recargo la función addEventListener del Nodo para interceptar y almacenar los oyentes, pero yo no lo recomiendo ...
EDIT:
De jQuery 1.8, están disponibles en $._data(element, "events")
datos de eventos. El registro de cambios tiene una advertencia que debe tenerse en cuenta:
Tenga en cuenta que esta no es una interfaz pública compatible; las estructuras de datos reales pueden cambiar de manera incompatible de una versión a otra.
1 de la llanura javascript pero podría hacerlo navegadores (attachEvent). –
Quizás. Esto se haría [como se explica en el MDN] (https://developer.mozilla.org/en/DOM/element.addEventListener#Legacy_Internet_Explorer_and_attachEvent) –
Gracias por el intento con jQuery, sin embargo necesito Javascript nativo, lo siento por no mencionar . Sin embargo, voy con tu intento de bandera. Esperaré más respuestas, y si no es mejor, elegiré la tuya. – Patrick