Ответ 1
Используя jquery, вы можете использовать data("events")
для любого объекта (здесь окно):
var hasbeforeunload = $(window).data("events") && $(window).data("events").['beforeunload'];
Но это работает только для добавленных jquery-событий.
В более общем случае вы должны просто сохранить информацию, которую вы добавляете в качестве прослушивателя:
var addedListeners = {};
function addWindowListenerIfNone(eventType, fun) {
if (addedListeners[eventType]) return;
addedListeners[eventType] = fun;
window.addEventListener(eventType, fun);
}
Я думаю, что нет стандартного способа в javascript для получения существующих обработчиков событий. В лучшем случае вы можете зарядить функцию addEventListener Node, чтобы перехватить и сохранить прослушиватели, но я не рекомендую...
EDIT:
Из jQuery 1.8 данные событий доступны в $._data(element, "events")
. В журнале изменений есть предупреждение, которое следует учитывать:
Обратите внимание, что это не поддерживаемый публичный интерфейс; фактические данные структуры могут изменяться несовместимо с версией на версию.