(window,parent,opener,top).location.reload方法彙總

     最近項目是和某度合做,集成他們一個功能到咱們產品上。因爲是中途從同事手中接過來的活,而且第一次使用jsonp,不熟悉頁面的刷新跳轉,遭坑慘了,如今來記錄下這個狀況,但願給有相似需求的同志帶來些許幫助。
html

情景描述:json

登錄login.html頁面登錄驗證成功後,跳轉到index.html頁面,index.html頁面加載完成後就要發送jsonp請求到對方服務器獲得想應的數據並展現出來,如若沒有登錄某度的賬戶,彈出提示信息。而後須要點擊頁面的登錄按鈕,彈出某度的登錄框(iframe引入),登錄某度成功後(某度處理判斷),刷新頁面,從新展現數據。瀏覽器

處理技巧:緩存

某度登錄成功後須要跳轉到一個新的頁面,因爲是iframe引入,所以藉助一箇中間的頁面cs.html,而後在這個cs.html頁面裏面刷新最外面的頁面。開始時候在cs.html裏面使用的是top.location.reload(),這個方法在非ie內核的瀏覽器都是正常的,可是在ie內核的瀏覽器裏面始終提示沒有登陸(實際上已經登陸成功).這個坑花了大量的時間,最後我把這個方法換成了top.location.href,再看ie內核的瀏覽器就可以正常了,第一次使用這個,真是太鬱悶了。安全

附上網上搜集到的一些資料服務器

window.location.reload()刷新當前頁面.
parent.location.reload()刷新父親對象(用於框架)
opener.location.reload()刷新父窗口對象(用於單開窗口)
top.location.reload()刷新最頂端對象(用於多開窗口)
框架

另外介紹兩個方法的語法:post

reload 方法,該方法強迫瀏覽器刷新當前頁面。
語法:location.reload([bForceGet])
參數: bForceGet, 可選參數, 默認爲 false,從客戶端緩存裏取當前頁。 true, 則以GET 方式,從服務端取最新的頁面, 至關於客戶端點擊 F5("刷新")jsonp

replace 方法,該方法經過指定URL替換當前緩存在歷史裏(客戶端)的項目,所以當使用replace方法以後,你不能經過「前進」和「後退」來訪問已經被替換的URL
語法:location.replace(URL) 參數: URL
spa

在實際應用的時候,從新刷新頁面的時候,咱們一般使用: location.reload() 或者是 history.go(0) 來作。由於這種作法就像是客戶端點F5刷新頁面,因此頁面的method="post"的時候,會出現「網頁過時」的提示。那是由於Session的安全保護機制。能夠想到: 當調用 location.reload() 方法的時候, aspx頁面此時在服務端內存裏已經存在, 所以一定是 IsPostback 的。若是有這種應用: 咱們須要從新加載該頁面,也就是說咱們指望頁面可以在服務端從新被建立, 咱們指望是 Not IsPostback 的。這裏,location.replace() 就能夠完成此任務。被replace的頁面每次都在服務端從新生成。你能夠這麼寫: location.replace(location.href)


最後內容是剛發現的,不知道我此次這個地方top.location.reload(true),這樣能夠解決ie內核的問題不,抽時間到公司去試下。

有知道具體區別緣由的,望各位大牛告知,你們共勉!3Q

相關文章
相關標籤/搜索