I'm looking for a way to display a message to the user if he leaves my site after only viewing one page.
I found this (http://www.pgrs.net/2008/1/30/popup-when-leaving-website) clever solution, but it has a few flaws:
staying_in_site = false;
Event.observe(document.body, 'click', function(event) {
if (Event.element(event).tagName == 'A') {
staying_in_site = true;
}
});
window.onunload = popup;
function popup() {
if(staying_in_site) {
return;
}
alert('I see you are leaving the site');
}
It displays the message also when refreshing the page or using the back button.
Do you know a better solution or how to fix it in the above code? I'm no javascript master :)
My intention is to add the code on very specific landing pages only, and display the message when people leave the page without downloading my trial software or reading other pages on my site.
I will start by saying that I will not, in any way, recommend that you do this. It's a bad practice, it only annoys users and it makes you look extremely desperate. I repeat, don't do this, it's not a good idea, it's silly and it's not a good idea.
But the way you can do it is to only display the message when users are clicking on links that lead away from the site.
You can do this by looking at the href
attribute of the link and check if it's an external site. If it is, then display the message
But I repeat, don't do this!
We might be able to forgive you for window.onbeforeunload
. But that's it!
There are some cases where this can be very useful and not having this feature will be annoying. One of the applications I developed for a client required users to input a lot of data on a page (close to 25 fields). I know it would have been better and more usable if the form was broken into more pages, but that's not the point here. There were instances where employees (mostly not very savvy computer users) entered data but for whatever reason left the page without submitting (accidentally, I am sure), resulting in frustration. I was happy to do window.onbeforeunload
in that case.