firefox和javascript重定向

firefox和javascript重定向,javascript,jquery,firefox,history,Javascript,Jquery,Firefox,History,我目前对firefox有一个问题,在firefox中,所有其他浏览器的行为都是正确的——即使是IE6 我想做的是重定向到子页面,但留下一个历史记录条目。据我所知,有两种重写url的方法: window.location=“some.url”;-重定向到带有历史记录项的some.url window.location.replace(“some.url”);-无历史记录条目重定向 所以我必须使用第一个,并在firebug控制台中进行测试,一切正常 现在这个问题有一个奇怪的部分:在控制台中运行良

我目前对firefox有一个问题,在firefox中,所有其他浏览器的行为都是正确的——即使是IE6

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

  • window.location=“some.url”;-重定向到带有历史记录项的some.url
  • window.location.replace(“some.url”);-无历史记录条目重定向
所以我必须使用第一个,并在firebug控制台中进行测试,一切正常

现在这个问题有一个奇怪的部分:在控制台中运行良好的同一条语句在某些jQuery回调处理程序中不起作用:

jQuery("#selector").bind("submit", function() {
  $.getJSON("some_cool_json", function(response) {
    var redirect_path = response.path;
    window.location = redirect_path;
  });
  return false;
});
如果
response\u path
设置正确,我检查了它!即使重定向工作正常,但没有创建历史记录条目

有什么想法吗?太好了!;)

干杯

乔使用:

替换(url)
将当前文档替换为 一个位于提供的URL最新版本 与assign()方法的区别是 使用replace()后,当前 页面将不会保存在会话中 历史记录,表示用户不会 能够使用“后退”按钮 导航到它


如果这发生在我身上,我会尝试这样做:

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;
});
其思想是将“assign()”调用的执行放入“普通”事件处理程序中,以防“getJSON”响应函数的上下文有什么奇怪的地方。该函数(“getJSON”响应)将从执行刚刚添加到DOM中的
块的代码的浏览器上下文中调用,因此它至少有点不寻常


我不知道它会起作用;我还没有试过设置测试页面。

嗨,伙计,谢谢你的回答,我忘了提到我试过
assign
,但效果不好+1
assign()
window.location=”更正确http://...“
,但这并不能解释为什么会发生这种情况。可能firefox在使用window.location=”“?”时使用了.replace()?!Pointy的解决方案正在发挥作用,但我将更新我的代码以使用
assign
——这比=assign!更好!)听起来很奇怪,但就是这样!非常感谢。如果有一位jQuery专家来了解内部发生了什么,那将是一件有趣的事情!;)jQuery所做的是:在添加一个参数告诉JSON服务器要调用什么函数之后,它构建一个
标记,并将您的URL作为源。服务器返回一个类似于“functionName(/*…json block…*/)”的Javascript块。现在,当浏览器加载脚本时,脚本将运行,函数将被调用。jQuery为您构建该函数,它所做的只是调用传递给getJSON的回调。
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;
});