【问题标题】:javascript act on page eventsjavascript 作用于页面事件
【发布时间】:2020-10-15 19:44:57
【问题描述】:

我有一些用户在某些用例中得到的 javascript 错误页面(这是有效的)。

错误页面告诉用户该做什么并有一个链接去哪里,当用户完成激活某些服务时,他回到错误页面,用户点击刷新F5他得到一个错误,错误是因为他在 URL 和附加参数中有"?code=…"...

我认为从参数中捕获F5事件并清除url,可以吗? 如果没有,我有哪些选择?

场景

  1. 用户点击它打开的应用新页面
  2. 页面上写着“您尚未订阅该服务,请点击下面的链接了解如何操作”
  3. 用户单击链接并打开新选项卡运行该过程并进行订阅,现在一切正常。
  4. 用户返回错误页面并点击刷新,现在他收到错误,因为该页面已经包含一些 url 参数,

我该如何解决此类问题?

我正在使用带有简单 js/html 文件的 nodejs12使用任何 ui 框架....

【问题讨论】:

  • 刷新将转到同一页面。清除参数是不可能的,因为您实际上是在试图劫持刷新以引导其他地方。相反,您可能可以在用户登陆页面时重定向 - 无论是从后端还是从 JS,但要注意后者可能更不可靠。
  • 这能回答你的问题吗? How to call javascript on F5 key press
  • @VLAZ - “当用户登陆页面时重定向”是什么意思,认为用户收到一个错误页面,告诉他“你取消订阅服务,点击链接以了解如何操作”,现在用户单击并打开一个新页面运行订阅,现在没问题,但是当他刷新错误页面时,他得到了错误,你的建议可以吗?
  • @Asaf - 不,因为它有点棘手......
  • @VLAZ - 我更新了我的帖子,现在更清楚了吗?

标签: javascript html node.js oauth-2.0 openid


【解决方案1】:

基本答案是这样的:

document.addEventListener('keypress',function(e){
    e = e || window.event;
    if (e.keyCode == 116) {
        window.location.href = window.location.pathname;
    }
},false);

您可以使用以下代码代替基本重定向:

if(typeof URLSearchParams != undefined){
    var usp = new URLSearchParams(window.location.search);
    if(usp.get("code")!=null){
        usp.delete("code");
    }
    window.location.href = window.location.pathname+"?"+usp.toString();
} else {
    window.location.href = window.location.pathname;
}

你也可以使用这个:(这不会刷新页面)

if(typeof URLSearchParams != undefined){
    window.url=window.location.pathname+window.location.search;
    var usp = new URLSearchParams(window.location.search);
    if(usp.get("code")!=null){
        usp.delete("code");
        window.url=window.location.pathname+"?"+usp.toString();
    }
    if(window.history.replaceState){window.history.replaceState(null,null,window.location.href);}
    if(window.history.pushState){window.history.pushState(null,document.title,window.url);}
} else {
    window.location.href = window.location.pathname;
}

如果不支持 URLSearchParams,以上两种方法都会刷新页面。


因为您使用的是 F5 键,所以您可以使用这个:

document.addEventListener('keypress',function(e){
    e = e || window.event;
    if (e.keyCode == 116) {
        if(typeof URLSearchParams != undefined){
            var usp = new URLSearchParams(window.location.search);
            if(usp.get("code")!=null){
                usp.delete("code");
            }
            window.location.href = window.location.pathname+"?"+usp.toString();
        } else {
            window.location.href = window.location.pathname;
        }
    }
},false);

【讨论】:

  • 谢谢,你能解释一下每个部分的作用吗?我应该一起使用它们吗,每个部分都提供不同的选项?
  • 您可以将底部的一个放在第一个。您需要将代码放在 if 中(替换 window.location.href .....)因为您使用的是 F5,所以页面将以任何方式刷新。所以你需要在那里使用第二个代码。您可以在某处注意第三个代码,它可以从 url 中删除一个参数而无需刷新。
  • 编辑了答案。
  • 我的代码是您问题的正确答案吗?
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2011-01-17
  • 2013-02-04
  • 2012-05-05
  • 2022-08-17
  • 1970-01-01
相关资源
最近更新 更多