views:

87

answers:

2

Hi, I have a flash app, that redirects to another page. I'd love to trap any other window unload event (clicking links / submitting forms) and warn the user they'll lose their progress in the Flash app.

However, I can't find any way to tell that the click/change of URL/window unload was triggered by Flash vs being triggered by a normal link etc.

Is there any way to detect this, and how reliable is it?

A: 

There's no way to tell what caused an unload event directly in the event handler. However, you might be able to achieve this by attaching an onclick event handler to every link on the page that sets a variable. In jQuery:

$("A").click(function(){window.clickedLink = this});

You might read the clickedLink in your unload event and tell the difference.

Steffen Müller
+1  A: 

How do you redirect to the other page from Flash?

What you can do is redirect with a Javascript-function, and call this from Flash (with ExternalInterface). When you call this redirect, you set a certain flag, indicating you're redirecting from Flash. Then set a listener for the window unload event, and check if the flag is set. If not, you can show the message to the user. Otherwise, just skip this and redirect.

    <script>
    var callFromFlash = false;
    window.unload = unloadPage;

    //call this function from Flash using ExternalInterface
    function doRedirect(url)
    {
        callFromFlash = true;
        //redirecting
        window.location.href = url;
    }

    function unloadPage()
    {
        if(!callFromFlash)
        {
            //show message and wait for response
        }
    }
    </script>
Pbirkoff