Si realmente lo necesita, no puede obtener todos los enlaces, formularios y objetos DOM que tengan un controlador que cambie la URL y espere hasta que haya hecho lo que desea. Para obtener los enlaces, obténgalos por getElementsByTagName, compruebe si el href comienza con algo que no sea un # y simplemente agregue su función onbeforeunload add onclick (que se invocará antes de examinar el href). Lo mismo para los formularios pero con envío. Y finalmente, para los elementos que cambian el href con JavaScript, debes asegurarte de cuando agregas el lsitener que llamas tu función onbeforeunlaod (o, si usas escuchas DOM0 o DOM1, puedes simplemente agregar alguna clase y luego usar un script que comprueba todos los elementos con la clase y lo agrega al detector de eventos con un cierre.
Pero normalmente deberías evitar el uso de este evento (probablemente usando cookies para almacenar lo que quieres enviar cada x segundos y permite, en el peor de los casos, echarle un vistazo la próxima vez que el usuario carga una página y, en el mejor de los casos, poder enviar una solicitud Ajax antes de la descarga o al momento de la descarga, incluso si solo envía los encabezados http , le permitirá obtener lo que desea).
Este es un duplicado de [no window.onbeforeunload trabajando en ¿el iPad?] (http://stackoverflow.com/questions/3239834/window-onbeforeunload-not-working-on-the-ipad) –