文档位置 - 不添加到历史记录

4

我试图在onLoad事件中使用document.location(.href)来从一个页面(A)重定向到另一个页面(B)。

据我所知,如果我使用document.location.href(而不是.replace),它应该将(A)添加到我的历史记录中。然而,这似乎并没有发生。

我尝试了设置document.location、document.location.href和使用.assign,但这些都似乎没有将第一个页面添加到历史记录中。是否有任何JS技术可以通过onLoad完成,使(A)出现在历史记录中?

谢谢, 维克多


就我所知,“document.location”在1996年左右被弃用,当时Netscape Navigator 3发布了。访问当前位置对象的首选方式是使用“window.location”(或其同义词,如“self.location”,或仅使用“location”)。然而,浏览器仍然支持“d.l”,所以这不太可能是您问题的原因。“location.href”应该可以正常工作。 - NickFitz
3个回答

9
'

'location.href'、'document.location' 或者这些变体只有在来自用户发起的操作时才会将其添加到浏览器历史记录中。例如,如果用户单击一个按钮,触发执行 'location.href' 的函数,它将被添加到浏览器历史记录中;但是,如果 'location.href' 是由 onload 事件调用的(这不是用户发起的操作),它将不会被添加到历史记录中。

'

有没有参考资料? - Gerald
这种行为的参考资料以及如何预防它会很有帮助。 - jontro
参考一下,这是当href被设置时,位置对象运行的算法的规范:https://html.spec.whatwg.org/multipage/history.html#location-object-setter-navigate - 请注意替换标志未设置的条件。 - julioolvr

2
如果您修改document.location.href,它一定会添加到历史记录中。

尝试此演示页面 →

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<style type="text/css" media="screen">
body { background-color: #000; font: 16px Helvetica, Arial; color: #fff; }
</style>
<script>
$(document).ready( 
function() 
{ 
   $('#hello').click( function(ev) { ev.preventDefault(); document.location.href='http://www.google.com';}); 
} 
);
</script>
</head>
<body>
  <p>Hello from JS Bin</p>
  <a id="hello" href="#">Click Me</a>
</body>
</html>

您能否创建一个示例页面,显示浏览器历史记录未更改?


<body><script>location.assign('http://www.google.com');</script></body> - GrayFace

-1

尝试:

 location.replace('www.google.com');

这将把页面加入到你的浏览历史中。

1
这将用新页面替换当前项目,删除旧页面。这更像是一个重定向。 - user55776

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接