使用window.location.href跳转页面在IE和FF浏览器中路径不一致的问题总结

  上周五的时候遇到一个问题,平时做项目的时候一直使用的是火狐浏览器,上周完成了一个小论坛的功能,因为访问论坛是不需要的用户登录的,只有发帖和回复的时候才需要用户登录,所以就在系统中加了一个拦截器,发帖时候如果没有登录就跳转到登录页面,功能完成以后在火狐浏览器下面使用完全没问题,平时很少使用IE浏览器,所以也没有在IE下面测试就直接放到服务器上测试了,在服务器上测试的时候还是使用的火狐,也没什么问题,但是我的一个同事去测试的时候就出现了问题,他是使用的IE浏览器,访问的时候明明是不需要用户登录的地方也跳转到了登录页面,功能完全都乱了,一直在跳转登录页面,就开始第一下进入不会出现登录页面,然后不管点击什么按钮都是登录页面。

  针对上面的问题我就开始调,开始的时候以为是我的拦截器的问题,但是在使用火狐调的时候完全没问题,然后我就使用IE11开始测试,debug拦截器,然后就发现了一个问题,第一次进入的时候拦截器获取到的路径是/com/action.action,但是点击下一个连接的时候就变成了/com/com/action.action,每点击一个连接都会在方法的前面再加上一个/com,/com是我struts2的命名空间,但是在FF下面测试的时候拦截器每次获取的路径都是/com/action.action,所以在FF下面运行时没问题的。

  然后就开始去问度娘怎么解决,度娘给出的答案是IE浏览器在解析window.location.href = url的时候,如果url是相对路径,那么IE浏览器解析的时候是会出现问题的,不能正确访问,由于当时比较着急,所以也就没想那么多,就继续针对这个问题再网上找解决办法,然后就发现了下面的方法:

function getContextPath() {
    var pathName = document.location.pathname;
    var index = pathName.substr(1).indexOf("/");
    var result = pathName.substr(0,index+1);
    return result;
  }
var path = getContextPath();

window.location.href = path+"/com/forumAction_list.do";

使用这种方式之后在本地测试不管是IE还是火狐或者谷歌都没问题了,以为问题解决了,然后就在服务器上测试,但是到了服务器上之后所有的浏览器全部不好使了,都是点击一下就会出现登录页面,很郁闷有没有,然后就继续在网上找答案,但是很多都是直接复制上面的方法,根本没有什么实质性的作用,然后在博客园还有CSDN发帖询问,但是也没有得到什么有用的信息,可能大神们都在code/code/code.......,然后就一直拖到了今天,重新看别人发帖询问时的回复,有人说是使用绝对路径可以解决,然后就抱着试一试的心态改了一下,然后就成功了。

  解决办法就是使用绝对路径,所以上面的url就可以改成“/项目名称/xxx/xxxAction_xxx.do”,经测试在服务器和本地的IE和火狐还有谷歌都是适应的,在此记录一下,备忘一下,也希望能帮到其他遇到这个问题的人,有问题的地方欢迎大神们指出。

  

时间: 2025-01-09 12:09:43

使用window.location.href跳转页面在IE和FF浏览器中路径不一致的问题总结的相关文章

window.location.href跳转问题2

"window.location.href"."location.href"是本页面跳转 "parent.location.href"是上一层页面跳转 "top.location.href"是最外层的页面跳转 举例说明: 如果A,B,C,D都是jsp,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js这样写 "window.location.href"."locatio

5. window.location.href/replace/reload()--页面跳转+替换+刷新

1.window.location=url; window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面. 一.最外层top跳转页面,适合用于iframe框架集 top.window.location.href("${pageContext.request.contextPath}/Login_goBack"); ===================================================================

window.location.href/replace/reload()/页面跳转+替换+刷新

一.最外层top跳转页面,适合用于iframe框架集 top.window.location.href("url"); ============================================================================================ 二.window.location.href和window.location.replace的区别 1.window.location.href="url":改变u

window.location.href 跳转无历史记录

需求:从页面a单点登录跳至页面b,在页面b里做判断符合条件后location.href至c页面 问题:在页面c中点击返回按钮页面回到了a,正常情况下应该回到页面b 原因:在当前页面的 onload 事件发起之前,location.href 也是替换当前历史记录,但我是写在window.onload里的啊,不知道为什么也不行,打印history确实只有两条记录. 解决方法一:加延时器setTimeout,能解决问题,但是不友好 方法二:pushState,手动添加一条记录 history.push

window.location.href 跳转失败

我恨这个问题,因为困扰已久,做为一个不称职的半开发人员,对前端非常不熟,程度仅限于alert调试的水平 这个问题似乎是IE的一个傻逼哄哄的BUG引起的,在AJAX盛行的今天,当在返回success状态(200)后特别容易出问题,导致浏览器无法跳转. 究其原因,是因为window.location.href被其他代码干扰,(例如void(0).return false ),导致找不到父框架造成的. 解决办法,有一个: 在 window.location.href = url; 后加一句 windo

window.location.href 跳转后再返回浏览器缓存问题

最近写了个手机端一个活动页面,会展示用户信息,需要location.href 跳转到用户编辑页面编辑用户信息. 然后按下手机的返回操作进入活动页面,发现并没有重新的像后台发起请求,而是从浏览器中直接获取了请求响应数据.经过多方查找,最终解决了,原因为我的活动页面使用了 GET请求,解决方案有两种方法一:依然使用GET 请求在请求参数上多添加一个 timestamp=new Date(). 方法二:将GET请求换成POST 请求.我之前也使用客户端在header中添加 meta "Cache-Co

JS中设置window.location.href跳转无效

window.location.href="login.jsp"; window.event.returnValue=false; 原文地址:https://www.cnblogs.com/kelly07/p/8439433.html

js如何获取window.location.href跳转后查询字符串的值?

$("#worked_count").parent().attr("onClick","window.location.href='view/warn/task_list.html?task_status=D'"); $(document).ready(function () { console.dir(window.location.search); //打印?task_status=E}); 原文地址:https://www.cnblogs.

window.location.href问题,点击,跳转到首页

onClick="window.location.href='./';" 点击,跳转到首页. location.href=url Js中实现跳转 window.location.href跳转新窗口 window.location.href="http://cwhois.cnnic.cn/validatecode/validate.jsp?value="+strName+"&entity=domain&service=/whois&i