IE feuert Popstate nicht ab, wenn ein Hash-Wechsel stattfindet

Ich habe eine Seite, die das Routing auf der Client-Seite durchführt und die Verlaufs-API und Push / PopState verwendet. Was auf allen modernen Browsern gut funktioniert. (Suchmaschinen werden von node.js Prerenderer unterstützt)

Vor kurzem bin ich jedoch auf ein Problem gestoßen, bei dem der IE bei Hash-Änderungen kein Popstate auslöst, während Pushstate mit URLs einwandfrei funktioniert, einschließlich IE11.

Zum Beispiel so ...

$(document).on('click', 'a', function(e) {
    e.preventDefault();
    History.pushState({}, '', $(this).attr('href'));
});

... was richtig feuert ...

$(window).on('popstate', function() {
    console.log('url changed');
});

Gemäß der W3C-Spezifikation sollte der Hash-Wechsel Popstate auslösen, da er den aktuellen Verlauf ändert. Wenn ich jedoch Hash-Links hinzufüge (<a href="#hashchange">...), indem Sie auf IE klicken, wird nichts ausgelöst. : /

Ich würde nicht die IE-Erkennung durchführen wollen (da es heutzutage so viele Browser gibt, die in die selbe Schicksalsgrube fallen könnten), anstatt die Feature-Erkennung zu verwenden. Da die Historie (Popstate / Pushstate) auf die restliche Art und Weise einwandfrei funktioniert, kann ich das Problem mit dem fehlenden Push / Popstate nicht einmal erkennen ...

if(!window.history || !window.history.pushState) { ...

... und benutze stattdessen den Hashchange. : /

Irgendwelche Gedanken?

PS. Als Bonus wird durch die Verwendung von jquery.history.js (jquery wrapped version of history.js) mit einer Hashtag-URL das Ganze in die Luft gesprengt.

http://localhost/routetest/index.html#/page1/1234

wird

http://localhost/page1/1234

... ??? : /

Antworten auf die Frage(3)

Ihre Antwort auf die Frage