2010-03-08 80 views
4

我目前遇到了Firefox的一个问题,其中所有其他浏览器的行为都是正确的 - 甚至IE6!firefox和javascript重定向

我想要做的是重定向到一个子页面,但留下一个历史记录。据我所知,有两种重写url的方法:

  • window.location =“some.url”; - 重定向到具有历史记录条目的some.url
  • window.location.replace(“some.url”); - 重定向没有历史记录

所以我必须使用第一个,并在萤火虫控制台everthing测试工作正常。

现在有那种这一问题的奇特部分:相同的语句,在控制台运行良好并没有在一些jQuery的回调处理:

jQuery("#selector").bind("submit", function() { 
    $.getJSON("some_cool_json", function(response) { 
    var redirect_path = response.path; 
    window.location = redirect_path; 
    }); 
    return false; 
}); 

其中response_path设置是否正确,我查它!即使重定向工作正常,但没有创建历史记录条目。

关于那个的任何想法?会很好! )

干杯

回答

3

如果这是发生在我身上,我想尝试的事情会是这样:

jQuery("#selector").bind("submit", function() { 
    $.getJSON("some_cool_json", function(response) { 
    var redirect_path = response.path; 
    setTimeout(function() { 
     window.location.assign(redirect_path); 
    }, 1); 
    }); 
    return false; 
}); 

的想法是把的“分配()”调用的执行变成了“正常“事件处理程序,以防万一有关”getJSON“响应函数的上下文很奇怪。该函数(“getJSON”响应)将从浏览器的上下文中调用,该浏览器执行刚刚添加到DOM中的<script>块的代码,所以它至少有点不同寻常。

我不知道它会工作;我还没有尝试设置测试页。

+0

听起来很奇怪,但那就是它!谢谢!将有趣的是有一个jQuery大师在线了解内部发生的事情! ;) – xijo 2010-03-08 14:34:48

+0

jQuery做的是这样的:在添加一个参数告诉JSON服务器调用哪个函数之后,它会以您的URL为源生成一个'

7

使用assign()

window.location.assign("http://..."); 

替换(URL)
与 一个在提供的URL替换当前文档。 从分配()方法 区别是 ,使用替代()当前 页面不会被保存在会议 历史,这意味着用户以后将不会 能够使用后退按钮 导航到它。

+0

嗨Henchman和感谢您的回答,我忘了提及我试过'assign',但它没有工作以及! – xijo 2010-03-08 12:25:48

+0

+1'assign()'比'window.location =“http:// ...”'更正确,尽管这并不能解释为什么会发生这种情况。 – 2010-03-08 12:27:23

+0

也许firefox使用.replace()时使用window.location =“”?! – 2010-03-08 12:45:20