I can think of at least the following as good candidates:
- If a user is filling details into a form and you are not persisting the data across pages.
For instance, a user providing his address at checkout on an online shopping site, may decide to go back to add a couple more details. In such a case you may wish to ensure that users are aware that their data will be lost if they navigate away from the page.
- If you are expecting the user to be redirected onto an important page.
For example, if you are redirecting a user to a payment gateway, it could be one of the options to prevent users from navigating away by mistake.
Note that although these are possible cases for use of onbeforeunload, I would strongly prefer to use alternate methods, whenever possible.
A key reason for avoiding it is, as you pointed out, some browsers may not fully support the feature.
Another reason being that you could always design your application better to avoid this. In case 1 above, you could ensure that the data is saved in view-state so that user gets the data prepopulated when they come back to the checkout page. In case 2, you could provide a nice warning on the page asking users to wait while the page redirects (as most websites do).