+ 10
JavaScript set onbeforeunload to default
In my web game, I want to use onbeforeunload function to alert users that their game won't be saved. But when they click on the leave button, I don't want to show them this again, so I want to set onbeforeunload to default function without alertbox. What should I do?
5 Antworten
+ 10
Jakob Meier document.body.onbeforeunload = function (){
   return false;
};
function clicked_leaving(){
   /*I want to prevent alert here*/
}
+ 10
Jakob Meier thank you so much👍
+ 2
Implements something like an "once decorator" pattern with closures to abstract behaviour in any part of code...
const once = (fn, ctx=null, ...args) => {
    let visited = !1;
    return (event) => {
        if (visited) {
            event.preventDefault();
            return;
        }
        // in other case, invoke!
        visited = !0;
        return fn.apply(ctx, [event, ...args]);
    };
};
You can also remove the listener as part of execution:
https://developer.mozilla.org/en-US/docs/Web/API/BeforeUnloadEvent
window.addEventListener("beforeunload", function handler(event) {
    // Cancel the event as stated by the standard.
    event.preventDefault();
    // Older browsers supported custom message
    event.returnValue = 'You have unsaved work. Continue?';
    // do more work above...
}, {
    // auto unregister after execute
    once: true
});
+ 1
you could declare a variable like seen_alert = false and  if they are shown the alert it is being set to true and then you check in your onbeforeunload 
if(seen_alert){
//don't show alert
} else {
//show_alert
seen_alert=true
}
Maybe you could publish the piece of code this is about, for me to understand it better
+ 1
yeah you could totally do:
var leaving = false;
and then in your unload event I think you do 
document.body.onbeforeunload = function (event) {
if(leaving) {
//save game
//don't show alert
} else {
//game not saved
event.preventDefault();
//show alert
}
}



