为什么历史记录在 Firefox 中的 onclick 上不起作用?

2024-01-07

我不明白为什么在 Firefox 中,window.history.back()确实适用于按钮:

<button onclick="window.history.back()">Go back</button>

但它不适用于链接:

<a onclick="window.history.back()">Go back</a>

有什么不同?

一个例子说明了这一点:

索引.html

<!DOCTYPE html>
<html>
<body>
  <h1>First page</h1>
  <br/>
  <a href="second.html">Second</a>
</body>
</html>

第二个.html

<!DOCTYPE html>
<html>
<body>
  <h1>Second page</h1>
  <a href="third.html">Third</a>
  <br/>
  <br/>
  <button onclick="window.history.back()">Go Back (button)</button>
  <br/>
  <a href="javascript: void(0);" onclick="window.history.back()">Go Back (a)</a>
</body>
</html>

第三.html

<!DOCTYPE html>
<html>
<body>
  <h1>Third page</h1>
  <br/>
  <button onclick="window.history.back()">Go Back (button)</button>
  <br/>
  <a href="javascript: void(0);" onclick="window.history.back()">Go Back (a)</a>
</body>
</html>

设想:

  1. 运行index.html并单击Second.
  2. 在 secondary.html 上单击Third.
  3. 在 Third.html 上单击返回(一).
  4. 在 secondary.html 上单击返回(一)。繁荣!我在第三个.html,而不是第一个.html!

笨蛋的例子 http://plnkr.co/edit/erszqHsAkmk0yR1quzYB?p=preview(注意!在 Firefox 上运行)

如果你使用返回(按钮)有用。有什么区别<a onclick and <button onclick在这种情况下?


您正面临这个问题(引自 vikku.info http://vikku.info/codesnippets/javascript/why-javascript-historyback-toggles-between-two-pages/):

但是当我导航到后按后退按钮时发生了什么 我在最后两个导航页面之间锁定了各个页面。

评论里有人说到了这个问题。

  • 当您创建onclick属性,您正在附加一个用于单击链接的附加事件处理程序。然而,浏览器仍然会处理一些native逻辑,所以它仍然会将当前页面添加到历史记录中;
  • 当您将特定的 javascript 传递到href属性,你实际上覆盖了native浏览器的逻辑,因此不会将当前页面添加到历史记录中;

简单但肮脏的解决方案

HTML:

<a href="javascript:window.history.back();">Back</a>

改进的解决方案

我还创建了一个示例(笨蛋的例子 http://plnkr.co/edit/okn2uK0IvewxpTy6nqyf?p=preview)利用本机preventDefault功能(MDN 上的 PreventDefault https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault)。在这种情况下,不需要在中编写 javascripthref属性。现在,您可以通过链接到主页等方式来支持不使用 javascript 的用户。您最好还避免使用内联事件处理程序。

HTML:

<a href="index.html" id="backButton">Back</a>

JavaScript:

var backbutton = document.getElementById("backButton");
backbutton.onclick = function(e){
  e = e || window.event; // support  for IE8 and lower
  e.preventDefault(); // stop browser from doing native logic
  window.history.back();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么历史记录在 Firefox 中的 onclick 上不起作用? 的相关文章

随机推荐