我知道如何使用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="text/javascript">window.location = "c.html"</s'+'cript>');">b</a>
EDIT2:jQuery是问题,setTimeout
就是答案。我已经在下面添加了我的解决方案,以防其他人遇到这种奇怪的边缘情况。
EDIT3:简化了这个例子,使其更容易测试。在实际情况中,click处理程序进行返回HTML的Ajax调用,因此我们不能通过编写window.location = whatever来简化整个事情。代码来自服务器,嵌入在HTML中。
答案 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
代替位置。