Backbone.js仅在IE7中导致错误

时间:2011-02-11 20:53:00

标签: javascript internet-explorer-7 hashchange backbone.js

我在后端开发了一个带有CodeIgniter的Web应用程序,在前端开发了Backbone.js。 我也使用HTML5 Boilerplate作为我的开始模板。

我使用Backbone的控制器和历史记录作为我的应用程序的主要导航。我过去曾经做过一次,一切都很好。问题是,当我使用Backbone.History.start()启动hashchange事件捕获并单击链接example.com/#home,url中的哈希更改时,事件被触发但是在2秒之后,哈希被清除来自url,javascript错误仅在ie7中抛出。

通过创建运行间隔的IFRAME来检查哈希值的变化,我在IE7中查看了源代码和hashchange事件。

之前有人有这个奇怪的错误,知道如何解决这个问题吗?

4 个答案:

答案 0 :(得分:4)

使用Backbone处理#hash基础应用程序的正确方法似乎是Backbone.history.saveLocation(哈希),并在Backbone.history.loadUrl()之后启用Controller的路由。

Whish我之前知道这个...... 享受这个令人敬畏的MVC库:)

答案 1 :(得分:3)

我发现工作的解决方案是使用Ben Alman的hashchange plugin。转到Backbone.History中的start函数,并用此替换start函数的代码。

start : function() {
    $(window).hashchange(this.checkUrl);
    return this.loadUrl();
}

请务必在代码中包含hashchange插件文件。

答案 2 :(得分:2)

单击哈希URL实际上并不在IE中保存历史记录条目 - 使用Backbone的saveLocation功能删除您希望能够返回的位置的标记。有关完整的独家新闻,请参阅:

http://documentcloud.github.com/backbone/#Controller-saveLocation

答案 3 :(得分:1)

我在Jon Leighton的官方问题列表中找到了解决此问题的解决方案:https://github.com/documentcloud/backbone/issues/228

直到一个官方补丁添加到backbone.js(Backbone 0.3.3中的第689行)

this.iframe.document.open().close(); 
this.iframe.location.hash = window.location.hash;

在以下行之后:

this.iframe = $('iframe src="javascript:0" tabindex="-1" ').hide().appendTo('body')[0].contentWindow;

(我无法写完整的i-frame标签<& /> - 这里不允许这样做:))