Backbone.history:深层网址在IE中没有正确支持

时间:2013-01-22 22:45:50

标签: internet-explorer backbone.js pushstate singlepage html5-history

在我的单页骨干应用程序中,我无法让我的长网址在IE中正确路由。任何嵌套多个级别的网址在直接加载时都不会收到正确的哈希fallbak。

顶级网址工作正常......

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)

但访问更深层的网址会直接破坏网页

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

2 个答案:

答案 0 :(得分:0)

我不确定你在过去的3个小时里是否改变了你的分期,但我观察到的问题与这个问题有关

IE doesn't support relative paths in the base element when referencing CSS files

当您的网页请求http://stage.change4cancer.org/profile/647955793时,它会获得该网页的实际html。现在是否应该重定向到#profile / 647955793是另一回事(为什么你在加载内容之后想要这样做,我不确定),但让我解释一下。

http://stage.change4cancer.org/profile/647955793的html中,您有以下标记:

<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都没有加载,当然事情会出错。

答案 1 :(得分:0)

试试这个:

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())
}