browserstate / history.js

History.js gracefully supports the HTML5 History/State APIs (pushState, replaceState, onPopState) in all browsers. Including continued support for data, titles, replaceState. Supports jQuery, MooTools and Prototype. For HTML5 browsers this means that you can modify the URL directly, without needing to use hashes anymore. For HTML4 browsers it will revert back to using the old onhashchange functionality.

Home Page:http://browserstate.github.com/history.js/demo/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Need to call stopImmediatePropagation() on popstate event

ataraxie opened this issue · comments

I'm using History.js in an add-on for Atlassian Confluence. We have an environmental problem with the popstate event and we need to call event.immediatePropagation() on that popstate event. The internal handler is this:

History.onPopState = function(event,extra){...}

Unfortunately, outside of History.js I have no access to that event and I cannot call the method on it. Instead, a new event 'statechange' is triggered:

History.Adapter.trigger(window,'statechange')

In my listener, I have now only the statechange event available and not the popstate event (which causes the misbehaviour in my environment):

History.Adapter.bind(window, 'statechange', function(event) {
    // event is the statechange event and I have no access to the popstate event
});

I worked around this issue in my history code by passing the popstate event as parameter in the trigger call:

History.Adapter.trigger(window,'statechange',{popstateEvent: event})

Then I can do this in my listener:

History.Adapter.bind(window, 'statechange', function(event, data) {
    data.popstateEvent.stopImmediatePropagation();
});

Of course this is no desired solution to "patch" library code for my needs. Maybe you would consider this a useful edit? Or maybe you have a better solution for my problem in mind?