近期做的項目有個問題,就是需要獲取上個頁面連接地址,我用的IE瀏覽器,在用location.href連接到新地址的時候,在新地址頁面用document.referrer的方法獲取不到原地址,我測試了下,用的火狐和谷歌都行。有些IE版本可以,有些不支持,在老師的幫助下,在網上找到了解決方式。
這個是我的product-view.jsp頁面,我點擊結算時需要判斷有沒有用戶ID,如果沒有的話我就讓他先登錄,gotuurl()里的url是你去的目標頁面,這個方法創建了一個a標簽,然后自動觸發點擊事件去到目標頁面,
function goumai(userid,proid,proprice,number) {
alert("請先登錄!");
gotourl("/EBuy/login.jsp");
}
function gotourl(url){
var referLink = document.createElement('a');
referLink.href = url;
document.body.appendChild(referLink);
referLink.click();
}
這時的目標頁面login.jsp就可以拿到referrer了(上一個頁面地址);
$(function(){
var address=document.referrer;
$("#yincang").attr("value",address);
}
)
然后登陸頁面又要轉到Servlet的LoginJudge頁面,剛好我的Login用的是表單提交我可以用隱藏域把上一個頁面的地址再傳遞到LoginJudge頁面,並加上判斷再返回原頁面。
if(address!=""){
response.sendRedirect(address);
return;
}
如果沒有表單驗證的話,那么Servlet取referrer的方式是:
String url= request.getHeader("Referer");
System.out.println(url);
String refer=url.substring(url.indexOf(request.getContextPath()));
response.sendRedirect(refer);
因為此時還沒學異步提交,只有用這個笨方式了,當然Login頁面處理不好會有許多bug,比如你登陸失敗,或注冊失敗之后再輸入就算成功了,獲取的也還是這個頁面就不能跳轉了,判斷很麻煩。
測試的
Localtion.href和<jsp:forward page="login.jsp"></jsp:forward>在一些IE瀏覽器里都不能傳遞referrer。