使用以下代码可以轻松重现。
问题是当带有散列(任何散列,例如http://localhost:8000/error/#whatever)的URL被导航到然后刷新时,Internet Explorer会调用catch-all route * url类别(和警报),但随后继续删除散列并再次重新启动该路线。
该页面按照预期与Webkit,Firefox,Opera等一起工作,刷新时只触发一个警报。测试是在本地完成的。使用的所有库都是最新版本。
注意:在IE8和IE9中,由于使用了html5 doctype,渲染引擎将默认为IE7标准模式 - 在IE8和IE9标准模式下,这可以按预期工作。
<html><head>
<script type="text/javascript" src="{{ STATIC_URL }}js/jquery171.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}js/underscore131.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}js/backbone091.js"></script>
<script>
App = {
start: function(){
new App.CatalogRouter();
}
}
App.CatalogRouter = Backbone.Router.extend({
routes: {
'checkout/' : 'checkout',
'*url' : 'category'
},
category : function(url){
alert('should only trigger once');
},
checkout: function(){
}
})
$(function(){
App.start();
Backbone.history.start();
});
</script>
</head>
<body></body>
</html>