Skip to content
This repository has been archived by the owner on Apr 15, 2019. It is now read-only.

Unload code not called on iPhone/iPad #43

Open
solarice opened this issue May 14, 2012 · 5 comments
Open

Unload code not called on iPhone/iPad #43

solarice opened this issue May 14, 2012 · 5 comments

Comments

@solarice
Copy link

Unload code is not called on iPhone/iPad and there is no navigation timing API currently supported.

IPad/Iphone uses the “pagehide” event instead of “unload” event.

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

I tested this and it works. I'm new to git, but I'll try to send the code updates later today.

@solarice
Copy link
Author

Still figuring out GIT. Somehow my branch is not 'public' so I cannot see my local checkins on this web-site in order to issue a pull request...?

Here's the code I added to boomerang.js. "pagehide" for iPhone/iPad and "onunload" for blackberry....

        impl.addListener(w, "pagehide",
                    function() {
                        if(fn) {
                            fn.call(cb_scope, null, cb_data);
                        }
                        fn=cb_scope=cb_data=null;
                    }
                );
        impl.addListener(w, "onunload",
                    function() {
                        if(fn) {
                            fn.call(cb_scope, null, cb_data);
                        }
                        fn=cb_scope=cb_data=null;
                    }

@bluesmoon
Copy link
Contributor

Hi @solarice thanks for the patch. We've moved development to https://github.com/lognormal/boomerang/

I'll merge your changes in there and give you credit.

Regarding the change you made for BlackBerry, don't we already listen to the unload event? Or does BlackBerry do something weird with event names?

@solarice
Copy link
Author

Yes, sort of. Exiting code had "unload" but blackberry uses "onunload".

    // Add "pagehide" for support on iPad/iPhone
    // Add "onunload" for Blackberry
    if(e_name === 'page_unload') {
        impl.addListener(w, "unload",
                    function() {
                        if(fn) {
                            fn.call(cb_scope, null, cb_data);
                        }
                        fn=cb_scope=cb_data=null;
                    }
                );
        impl.addListener(w, "beforeunload",
                    function() {
                        if(fn) {
                            fn.call(cb_scope, null, cb_data);
                        }
                        fn=cb_scope=cb_data=null;
                    }
                );
        impl.addListener(w, "pagehide",
                    function() {
                        if(fn) {
                            fn.call(cb_scope, null, cb_data);
                        }
                        fn=cb_scope=cb_data=null;
                    }
                );
        impl.addListener(w, "onunload",
                    function() {
                        if(fn) {
                            fn.call(cb_scope, null, cb_data);
                        }
                        fn=cb_scope=cb_data=null;
                    }
                );
    }

The impl.addListener method adds the "on" prefix when calling "attachEvent", but that's not getting used....

addListener: function(el, sType, fn, capture) {
    if(el.addEventListener) {
        el.addEventListener(sType, fn, (capture));
    }
    else if(el.attachEvent) {
        el.attachEvent("on" + sType, fn);
    }
}

http://docs.blackberry.com/en/developers/deliverables/11848/HTML_ref_event_attributes_600908_11.jsp

P.S. Thanks for adding in the iPhone/iPad portion. I'll try syncing up again as there's other fixes/enhancements I'd like to add.

@bluesmoon
Copy link
Contributor

wouldn't we also need to do this for the onload event in that case?

@solarice solarice reopened this Jun 12, 2012
@solarice
Copy link
Author

That's a good question. We were getting data in our tests and they seemed sufficiently accurate. I'll investigate some more to understand why it was working.

bluesmoon added a commit to bluesmoon/boomerang that referenced this issue Apr 2, 2015
Browsers that use a page cache may not always fire onunload when a user
navigates away from a page but doesn't close the window.  They fire the
pagehide event instead, and the pageshow event when the user returns to
the page.

It's better for us to use these events on browsers that support it.
pageshow/pagehide also fire when onload/unload would normally have
fired.

Thanks to github user @solstice for the info in issue 43:
YahooArchive#43
and the Surfin Safari blog:
http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
bluesmoon added a commit to akamai/boomerang that referenced this issue Aug 8, 2015
Browsers that use a page cache may not always fire onunload when a user
navigates away from a page but doesn't close the window.  They fire the
pagehide event instead, and the pageshow event when the user returns to
the page.

It's better for us to use these events on browsers that support it.
pageshow/pagehide also fire when onload/unload would normally have
fired.

Thanks to github user @solstice for the info in issue 43:
YahooArchive#43
and the Surfin Safari blog:
http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/
bluesmoon pushed a commit to bluesmoon/boomerang that referenced this issue Mar 8, 2017
Change optimized trie to avoid string that trigger a XSS warning from NoScript
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants