上周五的時候遇到一個問題,平時做項目的時候一直使用的是火狐瀏覽器,上周完成了一個小論壇的功能,因為訪問論壇是不需要的用戶登錄的,只有發帖和回復的時候才需要用戶登錄,所以就在系統中加了一個攔截器,發帖時候如果沒有登錄就跳轉到登錄頁面,功能完成以后在火狐瀏覽器下面使用完全沒問題,平時很少使用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和火狐還有谷歌都是適應的,在此記錄一下,備忘一下,也希望能幫到其他遇到這個問題的人,有問題的地方歡迎大神們指出。
新聞熱點
疑難解答