Detect browser or tab closing
If I get you correctly, you want to know when a tab/window is effectively closed. Well, AFAIK the only way in JavaScript to detect that is to use either onunload
or onbeforeunload
events.
Unfortunately (or fortunately?), those events are also fired when you leave a site over a link or your browsers back button. So this is the best answer I can give, I don't think you can natively detect a pure close
in JavaScript. Correct me if I'm wrong here.
javascript to check when the browser window is closed
window.onbeforeunload = function (e) {
var e = e || window.event;
//IE & Firefox
if (e) {
e.returnValue = 'Are you sure?';
}
// For Safari
return 'Are you sure?';
};
https://developer.mozilla.org/en/DOM/window.onbeforeunload
How can I detect closing whole browser using javascript?
This is not an answer to the question in the title but solves the problem at hand (deleting a cookie on browser close) possibly in the most reliable way.
Use a session cookie!
They are deleted as the last browser window is closed. From MDN on document.cookie:
If neither expires nor max-age specified it will expire at the end of session.
Now what does "end of session" mean? This answer holds the... answer:
the cookie will then expire at the end of session (ie, when you close the browser)
There seem to have been some differences between browsers 5 years ago following this answer, however I am unsure about the current status of that. Depending on your usecase, this is still likely to suffice.
Detecting the browser closing through a JS event would be very unreliable due to conerns raised in @deceze's comment:
if you force-quit the browser or it crashes, the event won't fire either
Further than that, I don't think (although I don't have proof from any docs) that there is a respective DOM event for that to occur.
Trying to detect browser close event
Have you tried this code?
window.onbeforeunload = function (event) {
var message = 'Important: Please click on \'Save\' button to leave this page.';
if (typeof event == 'undefined') {
event = window.event;
}
if (event) {
event.returnValue = message;
}
return message;
};
$(function () {
$("a").not('#lnkLogOut').click(function () {
window.onbeforeunload = null;
});
$(".btn").click(function () {
window.onbeforeunload = null;
});
});
The second function is optional to avoid prompting while clicking on #lnkLogOut
and .btn
elements.
One more thing, The custom Prompt will not work in Firefox (even in latest version also). For more details about it, please go to this thread.
How to detect browser closing?
There is no way to know on the server-side (unless you are using some JavaScript to send a message to the server) that the browser has closed. How could there be? Think of how HTTP works - everything is request and response.
However, the application server will track when Sessions are active and will even tell you when a Session has been destroyed (such as due to time-out). Take a look at this page to see how to configure a HttpSessionListener
to receive these events. Then you can simply keep track of the number of active sessions.
The number of active sessions will lag behind the actual number of current users, since some period of (configurable) time has to elapse before a session is timed out; however, this should be somewhat close (you can lower the session-timeout to increase the accuracy) and it is a lot cleaner and easier than 1) tracking Sessions yourself or 2) sending some asynchronous JavaScript to the server when a browser is closed (which is not guaranteed to be sent).
Detect if window.close() will work before using it (JavaScript)
According to the docs, the window is script-closable also if session history of the given context is of length 1 (which is exactly what happens when you open a link in a new tab/window). You need to add that to your checker.
if(window.opener != null || window.history.length == 1){
//show button
}
Related Topics
Jquery's Live() Is Deprecated. What Do I Use Now
How to Request the Garbage Collector in Node.Js to Run
Typescript Compile to Single File
What Is Property in Hasownproperty in JavaScript
Add Cors Header to an Http Request Using Ajax
JavaScript Replace with Reference to Matched Group
Angular App Has to Clear Cache After New Deployment
How to Convert from Hex to Ascii in JavaScript
Firebase Callable Function + Cors
How to Catch Exceptions Thrown in a JavaScript Async Callback
Get Decimal Portion of a Number with JavaScript
React React-Router-Dom Pass Props to Component
How to Make an Angularjs Directive to Stoppropagation
What's Pros and Cons: Putting JavaScript in Head and Putting Just Before the Body Close
Auto-Refreshing Div with Jquery - Settimeout or Another Method
Google Chromecast Sender Error If Chromecast Extension Is Not Installed or Using Incognito