JavaScript:导航到新URL而不替换历史记录中的当前页面(不是window.location)

时间:2010-02-24 18:02:31

标签: javascript jquery browser-history

我知道如何使用window.location。问题是,(至少在FF中)它会从历史记录中删除您所在的页面。例如,我在页面A上,我导航到B和window.location用于将我发送给C.如果在页面C上,我点击返回,我最终在A,而不是B.

是否有其他方法导航到另一个页面而不从历史记录中删除当前页面?

编辑:如果你在Firebug中运行代码,就不会发生这种情况。

这是一个超级简单的页面(是的,我知道代码是丑陋的,它不是真正的代码),它显示了问题:

<html>
<head><script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"> </script>
<body>  
<div class="foo"></div>
<a href="javascript:$('.foo').html('<scri'+'pt type=&quot;text/javascript&quot;>window.location = &quot;c.html&quot;</s'+'cript>');">b</a>

EDIT2:jQuery是问题,setTimeout就是答案。我已经在下面添加了我的解决方案,以防其他人遇到这种奇怪的边缘情况。

EDIT3:简化了这个例子,使其更容易测试。在实际情况中,click处理程序进行返回HTML的Ajax调用,因此我们不能通过编写window.location = whatever来简化整个事情。代码来自服务器,嵌入在HTML中。

5 个答案:

答案 0 :(得分:3)

setTimeout就是答案。

$(div).html('<script...> setTimeout(function() { window.location = url; },10); </script>');

没有这个问题。它必须与jQuery执行内联脚本的方式有关(通过在script元素中创建head标记)。

答案 1 :(得分:0)

您可以使用window.location.assign(URL)

答案 2 :(得分:0)

我在Firefox 3.6中没有看到这种行为。按照你的例子,从stackoverflow.com我去google.com,然后从那里我使用Firebug控制台窗口设置window.location ='http://facebook.com'。在那里,这三个都在我的浏览器历史中..

答案 3 :(得分:0)

这只是一个黑客,我不知道它是否会奏效。使用window.history.back(1)

设置网址后尝试window.location = URL;

希望这有帮助。

答案 4 :(得分:-1)

使用location.href代替位置。