当您单击其中window.location设置为具有查询字符串参数的另一个URL的选项卡时,我们有一些用于导航的javascript . 这个URL基本上是:

  • 检查用户是否已登录

  • 如果不是,请将它们重定向到错误页面以再次登录

  • 如果是,请将其记录下来并继续下一步

  • 将它们重定向到另一个系统的另一个URL,然后将它们登录到该系统

如果下一个系统需要一些时间来完成请求,那么浏览器就会带有加载图标,用户可能会感到不耐烦并再次单击该选项卡 . 如果他们这样做,则第二步完成第一步,现在他们从步骤1.2的初始处理中退出,他们未通过检查并最终遵循1.1的路径 .

我们采用的解决方法非常简单 . 我们将window.location放入一个IF语句中,该语句检查一个人是否已经点击选项卡并且导航已经被启动 . 如果没有,那么它执行window.location设置 . 如果是这样,那么我们称之为“警报('请耐心');” . 这似乎适用于除IE11之外的每个浏览器,即便如此,仅当F12开发控制台未打开时 . 如果你打开它,它工作正常 .

但是如果你不这样做,由于某种原因警报弹出窗口最终会取消导航,而页面永远不会出现在任何地方 . 几乎与您按下escape键相同,或单击“停止”按钮 . 有时候这个奇怪的场景会加载下一页,但它认为警报窗口仍然是打开的,但事实并非如此 . 我可以在任务管理器中看到额外的任务,但它不可见 .

有人听过或看到过这样的事吗? Please note ,我知道除了使用警报之外,还有其他方法可以处理这种情况 . 我'm not looking for suggestions about how to accomplish a message in a different manner. I'm更感兴趣的是找出's any decent documentation that could explain to me why an alert after the page has started to unload may be behaving this way in IE11, and only when F12 isn' t打开 .

谢谢!

编辑添加代码示例

var navigatingTo;
function doNavigation(destination){
  if (navigatingTo && navigatingTo != ""){
    alert(navigatingTo);
  } else {
    navigatingTo = "Please be patient\nNavigating to " + destination;
    window.location = "/somepage.aspx?d=" + destination;
  }
}