Hallo Daniel,
in der onunload-Phase kannst Du nicht mehr viel machen. MDN schreibt:
- Nothing is visible anymore to the end user
- UI interactions are ineffective (window.open, alert, confirm, etc.)
- An error won't stop the unloading workflow
Was dir helfen könnte, wäre das beforeunload Event. Nur: Du kannst Dich bei den Werbegangstern bedanken, die beforeunload verwendet haben, um User auf ihrer Seite einzusperren; das hat dazu geführt, dass beforeunload nicht mehr so funktioniert wie man es gern hätte.
Nochmal die MDN:
Note: To combat unwanted pop-ups, browsers may not display prompts created in beforeunload event handlers unless the page has been interacted with, or may even not display them at all.
Since 25 May 2011, the HTML5 specification states that calls to window.alert(), window.confirm(), and window.prompt() methods may be ignored during this event. See the HTML5 specification for more details.
Die Spec ist hier, gemeint ist das Verhalten, das in §5.6.1.1 und §6.5.1 bezüglich des termination nesting level beschrieben ist.
Various browsers ignore the result of the event and do not ask the user for confirmation at all. The document will always be unloaded automatically. Firefox has a switch named dom.disable_beforeunload in about:config to enable this behaviour.
Deswegen: weil Browser mit allen Bosheiten des Wilden Weiten Web zu kämpfen haben, ist das von Dir gewünschte Verhalten nicht erreichbar. Weil es missbraucht wurde.
Was vermutlich gehen könnte, wäre ein Ajax-Call aus einem beforeunload oder unload Handler, der serverseitig die Lizenz freigibt. Wenn die Software das nicht unterstützt, stelle einen Change-Request.
Ihr könntet auch die Lizenz-Haltedauer auf 5 Minuten reduzieren und über einen Intervall-Timer alle 4 Minuten per Ajax Hintergrundcalls absetzen, die zu einem Refresh der Haltedauer führen. Wenn ihr in der Timerfunktion dafür sorgt, dass maximal 6 Halte-Calls abgesetzt werden, seid ihr bei 29 Minuten und habt das alte Verhalten. Ob das möglich ist und wie man das genau machen muss, hängt natürlich von der verwendeten Software ab, das müsstest Du - wie ein Genie 😉 - selbst herausfinden.
Mal gucken ob noch andere Ideen kommen 😀
Rolf
--
sumpsi - posui - clusi