【问题标题】:firefox and javascript redirectionFirefox 和 javascript 重定向
【发布时间】:2010-03-08 12:16:09
【问题描述】:

我目前在使用 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_path 设置正确的地方,我检查过了!即使重定向工作正常,但没有创建历史记录。

对此有什么想法吗?会很好! ;)

干杯

【问题讨论】:

    标签: javascript jquery firefox history


    【解决方案1】:

    使用assign():

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

    替换(网址)
    将当前文档替换为 一个在提供的 URL。 该 与 assign() 方法的区别是 使用 replace() 后,当前 页面不会保存在会话中 历史,这意味着用户不会 能够使用返回按钮 导航到它。

    【讨论】:

    • 嗨,Henchman,谢谢你的回答,我忘了说我试过assign,但效果不佳!
    • +1 assign()window.location = "http://..." 更正确,尽管这并不能解释为什么会发生这种情况。
    • 也许firefox在使用window.location = ""时使用了.replace()?!
    • Pointy 的解决方法是有效的,但我会更新我的代码以使用 assign - 它比 = 分配更好! ;)
    【解决方案2】:

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

    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 的 <script> 块代码的浏览器上下文中调用,因此它至少有点不寻常。

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

    【讨论】:

    • 听起来很奇怪,但就是这样!谢谢!有一位 jQuery 大师来了解内部发生的事情会很有趣! ;)
    • jQuery 的作用是:在添加参数告诉 JSON 服务器调用什么函数之后,它会以您的 URL 作为源构建一个 <script> 标签。服务器返回一个类似于“functionName(/* ... json block ... */)”的 Javascript 块。现在,当浏览器加载脚本时,脚本运行,并调用函数。 jQuery 为您构建了该函数,它所做的只是调用您传递给 getJSON 的回调。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多