Как я могу получить согласованные ссылки PushState между IE8 и IE10/современными браузерами с помощью backbone.js?

Я в Chrome, копирую свой URL: "http://www.example.com/a/123456789" и вставляю его в IE8. Он отлично работает, потому что мои маршруты настроены правильно.

Если я затем перейду куда-нибудь еще, я получу резервный URL-адрес IE8, как и ожидалось: «http://www.example.com/a#a/123456789» (обратите внимание на хэш), все в порядке.

Вот в чем проблема...

Теперь, если я скопирую свою ссылку с хешем (http://www.example.com/a#a/123456789) и вставлю ее в современный браузер, меня выкинет на http://www.example.com/a#a.

Кто-нибудь сталкивался с таким поведением?


person Alex K    schedule 14.12.2012    source источник
comment
Обратите внимание, что это не проблема с более новыми версиями Backbone или другими более новыми одностраничными библиотеками маршрутизатора приложений.   -  person Alex K    schedule 17.12.2016


Ответы (1)


Я придумал небольшой обходной путь для этого, поэтому я решил поделиться им, если он может помочь кому-то еще...

// Make urls copied from IE8 work when pasted in modern browsers
if (history.pushState && location.hash.match(/#a{1}/)) {
    location.href = location.href.replace('a#a', 'a');
}

По сути, я только что проверил, поддерживает ли браузер состояние push и находится ли искомый хэш в URL-адресе. Поскольку наши хэши такие же, как и в pushState, достаточно быстрой замены.

person Alex K    schedule 17.12.2012