繁体   English   中英

location.replace() 不会替换页面

[英]location.replace() doesn't replace the page

我第一次尝试在 html 页面之间进行转换。 当我创建它们时,我一直在寻找 replace 和 href 之间的区别,我选择了第二个。 我正在构建一个注销按钮。 所以当我点击它时,我需要被重定向到登录页面。 但我还需要让用户无法使用后退按钮导航回主页(从登录)。 所以在我的 home.js 文件中我写道(我正在使用 firebase):

const disconnettitiButton = document.getElementById("disconnettiti");
disconnettitiButton.addEventListener('click', () => {
      firebase.auth().signOut().then(function() {
        // Sign-out successful.
        window.location.replace("../index.html");
      }).catch(function(error) {
        // An error happened.
      });
    });

而这是与按钮对应的html(它不是真正的按钮......)

 <a class="nav-link" href="#" id="disconnettiti">Disconnettiti<span class="sr-only"></span></a>

问题是: window.location.replace() 成功更改页面并返回到登录表单。 但是当我单击后退按钮时,我也可以返回主页,在那里我调用了 .replace() 函数。 replace 方法应该删除历史记录的顶部,但事实并非如此。 任何解决方案? 非常感谢

你的逻辑有一个基本错误。 只有获得有效授权才能访问受限区域页面。

当用户注销时,应删除这些授权。 因此,即使您按下后退按钮,您也不再拥有授权,并且您将被重定向到登录页面。 如果您尝试指向受限区域中的特定 url,也会发生同样的情况。

例如,您可以使用在登录/注销时设置/取消设置的 cookie,或者您可以使用会话。 在限制区域的每个页面上,您需要在开始时检查 cookie 是否存在,否则进行重定向。

如果注销后您仍然可以看到限制区域内的内容(但您没有提供代码来检查),则说明您的应用程序出现问题

编辑:我在发布答案后看到了@scragar 评论,但我完全同意这一点,而不是 OP 的答案。 如果您不想限制应用程序,则不需要登录页面。 如果您无论如何都可以访问受限区域,则登录将变得完全没有意义

我认为您需要提供完整的 url 而不是提供相对路径。 因此,如果您在端口 3000 上从localhost提供页面并且index.html位于根目录,那么您应该将路径指定为http://localhost/index.html

此外,您的脚本必须抛出错误。 如果某些东西不起作用,您应该首先检查浏览器控制台。

希望能帮助到你:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM