首页 > 解决方案 > 使用javascript干净地强制路由

问题描述

我正在使用旧版应用的 UI,链接到该应用的路径是默认路径:

某事/fldr

每当加载该页面时,它都会强制创建一个 fldr/landing.asp 页面。我们想让它转到 other.asp 而不是登陆。

我的方法是使用:

if (document.readyState === "interactive") {
               if(location.href == 'https://www.something.com/fldr'){
            location.href="https://www.something.com/other.asp";
              }
            }

这样做会导致页面卡顿,在该页面中,lan​​ding.asp 加载,显示大约 2 秒,然后刷新到正确的页面。

是否有在 JS 或 jQuery 中执行此类操作的标准方法?我觉得有一种方法可以让页面挂起,直到 if 语句执行,而不是尝试加载错误的页面。但我不能为我的生活记住它是什么。我已经在后端通过强制在 API 中返回正确的页面来处理这个问题,但我仍然觉得这只能用 JS 来解决。

注意:路由名称是组成的,因为这是遗留应用程序的精简问题。

标签: javascriptjquery

解决方案


JavaScript(在浏览器中运行时)是一种客户端技术

这意味着在页面被提供并发送到用户的浏览器(客户端)之后,如果页面没有部分加载,它就无法运行。浏览器开始加载资源并解析脚本和代码,您的脚本将按照解析的顺序执行。实际上,这就是您遇到的延迟

虽然您可能会对此进行调整以使location.href更改在此过程的早期部分执行,但在您实施的客户端重定向之前无法避免部分页面加载。

本质上,有一种更好的方法可以做到这一点,一种将重定向延迟减少到用户察觉不到的方法。

在 Web 服务器级别进行此更改是理想的解决方案;但是,首先考虑一下,这还需要吗?

首先,在实现重定向之前,我建议查看 IIS 设置,看看是否有默认文档设置为fldr/landing.asp;

然后,您可以更改该设置以将默认文档设置为您需要的内容。

这是 IIS 如何执行此操作的示例

如果没有默认文档,或者如果有一些其他代码或应用程序逻辑强制landing.asp加载,那么您将在 Web 服务器上为该 URL 设置 301 永久重定向。

这是有关设置的 IIS 文档。

如果由于某种原因上述选项对您不可用(无权访问 Web 服务器等),那么您能做的最好的事情就是确保脚本在任何其他脚本、样式表等之前是页面中的第一件事., 已加载。

另一个可能有用的 hacky 事情就是替换landing.aspwith的全部内容other.asp并收工:)

这当然是最后的手段,希望您可以更改默认文档并处理它。


推荐阅读