According to https://vaadin.com/docs/v14/flow/browser/tutorial-execute-javascript.html and https://vaadin.com/docs/v14/flow/element-api/client-server-rpc.html, I should be able to do the following:
public WmsEntryPoint() {
...
final UI currentUI = UI.getCurrent();
currentUI.addDetachListener(e->onDetach(e));
getElement().executeJs(
"window.onbeforeunload = function (e) { var e = e || window.event; " +
"this.$server.closeTab($0); return; };",
currentUI);
}
@ClientCallable
private void closeTab( UI currentUI ) {
if( currentUI.getSession() instanceof VaadinSession )
LOGGER.info( "Tab being closed for session/UI " + currentUI.getSession() + "/" + currentUI );
else
LOGGER.info( "Tab being closed for UI " + currentUI );
currentUI.close();
}
This does not work, though. I get this problem in Chrome console:
VM10048:3 Uncaught TypeError: Cannot read property 'closeTab' of undefined
at window.onbeforeunload (eval at tt (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:980), <anonymous>:3:101)
at Object.eval (eval at tt (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:980), <anonymous>:3:21)
at tt (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:980)
at st (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:937)
at qt (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:562)
at Yq (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:479)
at ur.vr [as W]
(VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:988)
at oA (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:870)
at $q (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:983)
at or.pr [as D]
(VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:988)
at Ej (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:396)
at Sq (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:984)
at Tq (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:968)
at et.gt [as qb]
(VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:988)
at TA.UA [as K]
(VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:988)
at XMLHttpRequest.<anonymous> (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:572)
at sb (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:421)
at vb (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:856)
at XMLHttpRequest.<anonymous> (VM10039 client-59E69D05DF6B41AFC722309793280A0E.cache.js:585)
So what am I doing wrong?