Backbone.history: глубокие URL-адреса не работают должным образом в IE

В моем одностраничном базовом приложении у меня возникают проблемы с правильной маршрутизацией моих более длинных URL-адресов в IE. Любые URL-адреса, вложенные более чем на один уровень, не получают надлежащего хеш-кода при загрузке напрямую.

URL верхнего уровня работают нормально ...

when I load: domain.com/resource
in IE I get: domain.com/#resource (as expected)

навигация (в приложении) работает нормально ...

when I click on a link to: domain.com/resource/12345
IE sends me to: domain.com/#resource/12345 (as expected)

но доступ к более глубоким URL-адресам приводит к разрыву страницы

when I load: domain.com/resource/12345
in IE I get: domain.com/resource/12345 !! this is incorrect, and the page doesn't load

ОБНОВИТЬ:

Это IE9


person Thomas    schedule 22.01.2013    source источник
comment
у вас есть живая страница, где можно воспроизвести эту проблему? Я хотел бы взглянуть, но у меня нет под рукой настроенного на pushState сервера, чтобы попробовать это.   -  person jevakallio    schedule 23.01.2013
comment
@ fencliff - вы можете проверить промежуточный сервер stage.change4cancer.org/profile/647955793   -  person Thomas    schedule 23.01.2013
comment
Проблема воспроизведена в IE9. Я вернусь к вам, если что-нибудь выясню.   -  person jevakallio    schedule 23.01.2013
comment
@ Томас, вы когда-нибудь придумали, как исправить эту проблему?   -  person kinakuta    schedule 11.09.2013


Ответы (2)


Я не уверен, изменили ли вы что-нибудь в своей постановке за последние 3 часа, но проблемы, которые я наблюдаю, связаны с этой проблемой.

IE не поддерживает относительные пути в базовом элементе при обращении к файлам CSS

Когда ваша страница запрашивает http://stage.change4cancer.org/profile/647955793, она получает актуальный html для страницы. Теперь, должен ли он перенаправляться на # profile / 647955793 - это другой вопрос (я не уверен, зачем вам это делать после того, как вы уже загрузили контент), но позвольте мне объяснить.

В этом html из http://stage.change4cancer.org/profile/647955793 у вас есть следующий тег:

<base href="/" />

Но IE9 не будет учитывать этот тег, если у него нет полного URI. Следовательно, все пути к JS, CSS и т. Д. Неверны. Вместо того

http://stage.change4cancer.org/js/libs/backbone-0.9.2.min.js

он просит

http://stage.change4cancer.org/profile/js/libs/backbone-0.9.2.min.js.

Что на самом деле возвращает еще одну html-страницу какого-то типа

Поскольку ни один из ваших внешних JS не загружается, конечно, что-то пойдет не так.

person JayC    schedule 23.01.2013

попробуй это:

Backbone.history.start({ pushState: Modernizr.history, silent: true });
if(!Modernizr.history) {
    var rootLength = Backbone.history.options.root.length;
    var fragment = window.location.pathname.substr(rootLength);
    var search = window.location.search;
    Backbone.history.navigate('/#' + fragment + search, { trigger: true });
} else {
    Backbone.history.loadUrl(Backbone.history.getFragment())
}
person Zuriel    schedule 29.01.2013