我正在使用旧版应用程序的 UI,并且链接到此应用程序的路径是默认路径:
something/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";
}
}
这样做会导致页面卡顿,landing.asp 会加载,显示大约 2 秒,然后刷新到正确的页面。
是否有在 JS 或 jQuery 中执行此类操作的标准方法?我觉得有一种方法可以让页面挂起,直到 if 语句执行,而不是尝试加载错误的页面。但我一辈子都记不起那是什么。我已经在后端通过强制在 API 中返回正确的页面来处理这个问题,但我仍然觉得这是只能用 JS 解决的问题。
注意:路线名称是虚构的,因为这是旧版应用程序的精简问题。
最佳答案
JavaScript(在浏览器中运行时)是一种客户端技术。
这意味着在页面被提供并发送到用户的浏览器(客户端)之后,如果页面没有部分加载,它就无法运行。浏览器开始加载资源并解析脚本和代码,您的脚本将按照解析的顺序执行。 这实际上就是您遇到的延迟。
While you may possibly tweak this to make the
location.href
change execute in some earlier part of this process, there is no way to avoid a partial page load prior to the client-side redirect you have implemented.
本质上,有一种更好的方法可以做到这一点,它将减少重定向延迟,使用户感觉不到。
在网络服务器级别进行此更改是理想的解决方案;但是,首先考虑一下,是否需要这样做?
首先,在实现重定向之前,我建议查看 IIS 设置并查看是否有默认文档设置为 fldr/landing.asp
;
然后您只需更改该设置即可将默认文档设为您需要的内容。
Here's an example for IIS how to do this .
如果没有默认文档,或者有一些其他代码或应用程序逻辑强制 landing.asp
加载,那么您需要为该 URL 设置 301 永久重定向网络服务器。
Here are IIS docs on setting this up.
如果由于某种原因您无法使用上述选项(无法访问网络服务器等),那么您能做的最好的事情就是确保该脚本是页面中任何其他脚本之前的第一个内容,加载样式表等。
另一个可行的做法是用 other.asp
替换 landing.asp
的全部内容,然后就到此为止了:)
当然,这是最后的手段,希望您只需更改默认文档即可处理它。
关于javascript - 使用 javascript 强制指定路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53399177/