Making sure certain events are handled when closing browser window - asp.net

We have a website that needs to perform certain actions when a pop-up is being closed.
Note: Not a session end but just a popup being closed.
The solution we found so far, is catching the onunload of the page and then popup a page to perform the actions. When the new popup ends -> it hides itself and everybody's happy.
The problem happens with popup blockers, they seem to prevent our finalizer window from being executed.
Is there a way to force opening of this window? Is there a different way to execute this set of actions? (The actions are server side like closing a MF session that we opened etc.)

You can use dialogs instead of popups. For example, jquery ui dialog.
Then, the code for the dialog is on the same page and you can easily handle anything that happens on that page, closing of the dialog, popping the other one and so on...
cheers

Related

MeteorJS perform action when window closes

I want to perform an action when the user closes their browser.
I have tried use https://github.com/mizzao/meteor-user-status hooks. Mainly the UserStatus.events.on('connectionLogout') but this event gets fired when you refresh the page.
I also tried window.beforeunload but that too also gets called on every page refresh.
Is there something that allows me to perform an action when someone closes a browser?
So for clarification you want something to happen when the entire browser closes-- I exit my chrome browser?
Or when I leave your page?
Or when I close the tab/window in which your page was contained? (But browser is still running with other pages)

Need to open popup in foreground

I'm writing a process to alert the users when their session is about to end. I want a popup window (or alert) to appear, and I've got that much working, but more importantly I want them to be alerted even when their browser is in the background - either by having the popup come right to the foreground - on top of any other application, Or having their browser window flash in the taskbar.
Any ideas or suggestions how to do this? Is there maybe a property of the AJAX popup extender that controls this?
Thanks,
Paul
You can't put a popup in front of another application, however you can make the tab / title "blink" until they take notice.
Take a look at this solution https://stackoverflow.com/a/156274/935779
It is a JavaScript solution that may help.
A modal popup would be best for this. You don't need AJAX as you're not posting to the server.
Are you using jQuery? If so you can quickly and easily set up a timer which shows a modal dialogue box when the time expires.
On each page load, or on specific user actions you can reset the timer.
As for having the browser flash in the taskbar, I don't believe that's possible.

Can I avoid making a synchronous callback, if I want a click to only *sometimes* open a new window?

In this scenario:
User enters some information into a textbox
User clicks a button
Server-side processing of the entered information takes place
Depending on the result of that server-side processing, either a new window is to be opened, or a message is to be displayed on the current page (and no popup)
I cannot come up with an approach other than to use async: false in the jQuery ajax call, which is strongly discouraged:
Setting this option to false (and thus making the call no longer
asynchronous) is strongly discouraged, as it can cause the browser to
become unresponsive.
I've tried:
having the call be async and in the callback handler, depending on what the server said, sometimes opening a new window - this gets blocked by popup blockers
another idea, which I've not even bothered with due to its unpleasantness, is to always open a window, and it is this new window that calls the server, and sometimes closes itself (somehow updating text in the parent on its way out)
What I've settled on is what I've described above: in the click handler, do a synchronous server call, and if the server says to do so, open a new window. Popup blockers are happy with this, because the window opening is done in the click handler. But...
Similar (but not duplicate, as I don't always want to open a new window) questions that have not provided a nice solution:
How can I open a new window using a URL that is generated inside the getScript callback function, and avoid pop-up blockers?
(How) can I open the result of a form submission in a new window?
what you can do is ,
try to have a hidden field on your page which will be set by a value like true or false at server side , that you can check later on in jquery document .ready function
if the value is false just show a msg else popup a new window
as simple as that
I tried out my 'unpleasant' idea: to always open a new window, and have that new window make the server call, closing itself if the results of the server call dictated that it was not required.
But that was pretty horrible, so I stuck with the synchronous call.
So for me, the answer to this question is no, you can't avoid being synchronous in this situation.

Using XMLHttpRequest to display a popup

I am writing an ASP.NET 3.5 web app that displays a list of items. I want to be able to display a non-modal popup with details when the user selects an item. I want to be able to display several detail popups simultaneously. (i.e., the user can click an item to see its details, then click another item to get another popup.) Currently I call RegisterStartupScript during postback to write a "window.open(...)" script to the page when it re-renders. The problem, of course, is that this requires a full page postback and refresh.
It occured to me that this might be a perfect use for XMLHttpRequest or AJAX but I don't know how to do it (or whether it's even possible or smart to do this). Can someone show me the way?
I have the AJAX Extensions installed but I'd prefer not to use the AJAX Control Toolkit.
EDIT:
Some clarification: When the user selects an item a custom event is raised. On the server I handle this event and use some server-side logic to construct a URL which I then use with RegisterStartupScript to construct a "window.open(myUrl...)" script. But posting back the whole page to do this seems inefficient and I'd like to know if I can just make a call to a simple server-side function that constructs the url and sends it back without having to roundtrip the entire page.
Creating a popup has very little to do with AJAX, and a lot more to do with JavaScript. See the jQuery dialog library here. You can then use jQuery's AJAX API to do your server dirty work :)
jQuery Dialog UI
--
Bill Konrad
Devtacular - Web Development Tutorials
You can use DHTML Window widget.
It offers many way to display either modal or non modal window.
Also it supports AJAX.
You can use dhtmlwindow for open a new window, or
dhtmlmodal to open a new modal window.
Of course, you can edit it to match your requirement.
Sample:
var insWindow = dhtmlmodal.open("insbox", "iframe","UserMaster.aspx?" + queryStr, "User Master", "width=425px,height=500,center=1,resize=0,scrolling=1", "recal");
Do you really need to open a new window? Opening an absolutely positioned DIV or a new layer on top of the current page in the same window is all the rage these days.
Edit:
I don't think it would limit the number of popups, there is some neat stuff that can be done these days with libraries like jQuery + jQuery UI, you can simply create as many of these DIVs/layers as you need and make them movable, resizable, etc. Only thing that real popups have and these do not is that they do not appear on the tab panel/taskbar.
Yes, you will be limited to the size of the window in which is the main page opened, however, I don't personally see it as a problem since most people surf in a maximized browser window anyways.
Implementation of the oldschool typical popup window is undoubtedly much easier for you, but it also runs into problems with end user popup blockers. Just had that problem # my work, they needed to make a popup during the certificate authentication process for some reason and as soon as Yahoo released a new version their toolbar, it quit working).

Prevent a user from closing a browser window using "X"?

Can I tell, using javascript, whether a user has clicked on the "X" icon on a browser dialog, or the "OK"/"Cancel" buttons? I have code I need to run when the window closes, but it will only run when OK or Cancel are clicked.
I currently capture the onunload event of the window. How can i accomplish this?
window.onunload = function() { alert("unloading"); }
Why do you want to do this? We can probably help you come up with a different design that doesn't require this if you tell us what you're trying to do.
However, to answer your question: it's not possible to catch that event in all cases. You cannot prevent the user from closing the browser or guarantee that your code will execute when they do. You can make it slightly annoying for them, but they can disable javascript, or kill the process, or reboot the computer. Using the unload function is the closest you can come to having some code that runs when the window closes (it will run in cases of normal shutdown or when the user navigates away).
If I understood correctly, your question is about a browser dialog, not the main browser window.
To answer your question, you probably cannot distinguish between the Cancel button and the X button of a browser dialog. They'll both end up just returning a false. If you need this level of control, you should consider writing your own simulated dialog (lightbox) instead of a real JavaScript dialog. Or perhaps look at existing frameworks/plugins with modal dialogs that give you the amount of control you need.
What about if he does ALT + F4?
To the best of my knowledge, you can't detect whether the user closed the dialog by clicking the Cancel button or the [x] button, since neither are exposed to you beyond returning the result of the action (e.g., confirm() as true/false).
You can hook into the document.onbeforeunload event to perform whatever cleanup action you require; I've done so myself by sending an asynchronous XMLHTTP request to the server to make sure the user's session gets cleaned up properly.
It is impossible to catch the closing of the browser and handle every other event that also causes a post back. You can try and many people have before you and failed.
Your best bet is to use onbeforeunload and learn how to deal with session timeouts on your serverside to clean up data.

Resources