javascript中的window.name(js跨域解決方案)

2019-08-12 12:47:19 144

清閑的周末,本來閑來無事在家研究下新招的一個項目代碼,誰知我的噩夢已經開始了,我和一段前段就是代碼較上真了,真的搞不明白誓不罷休,奮戰到晚上終于知道為什么了,廢話不多說直接進入正題。

在js中如果我們控制臺輸出window對象,我們會發現里面有個屬性name,今天我們的主角就是它。

window.name 的美妙之處:name 值在不同的頁面(甚至不同域名)加載后依舊存在,并且可以支持非常長的 name 值(2MB)。

這句話看明白沒?對就是它,我就是糾結在為什么在另一個跳轉的頁面里面沒有定義“name”的值為什么會憑空出現我上一個頁面設定的name的值。

window.name 傳輸技術的基本原理和步驟為:

新鄉網站建設|新鄉網絡公司|新鄉網站優化推廣|新鄉微信公眾號開發

name 在瀏覽器環境中是一個全局/window對象的屬性,且當在 frame 中加載新頁面時,name 的屬性值依舊保持不變。通過在 iframe 中加載一個資源,該目標頁面將設置 frame 的 name 屬性。此 name 屬性值可被獲取到,以訪問 Web 服務發送的信息。但 name 屬性僅對相同域名的 frame 可訪問。這意味著為了訪問 name 屬性,當遠程 Web 服務頁面被加載后,必須導航 frame 回到原始域。同源策略依舊防止其他 frame 訪問 name 屬性。一旦 name 屬性獲得,銷毀 frame 。 在最頂層,name 屬性是不安全的,對于所有后續頁面,設置在 name 屬性中的任何信息都是可獲得的。然而 windowName 模塊總是在一個 iframe 中加載資源,并且一旦獲取到數據,或者當你在最頂層瀏覽了一個新頁面,這個 iframe 將被銷毀,所以其他頁面永遠訪問不到 window.name 屬性。

使用案例: 

 在網頁切換的時候window對象也不會被銷毀。

<script>
alert((window.name==""?"是":"不是")+"第一次開這個窗口!")
window.name="blueidea";
</script>

當網頁載入的時候,給window.name設置一個隨意的值,刷新之后,可以看到window.name的值已經設置了,就可以判斷出頁面已經是刷新過的了。如果沒有設置,顯然頁面是第一次載入。

判斷頁面是否第一次加載

這樣可以用來給網站建設過程中,提交頁面后我們經常要用到window.history.go(-1)返回上一頁,因為頁面的緩存功能,我們只能返回上次操作的頁面,但在刪除等操作中,我們希望實時看到刪除項目后的頁面,這就要用到同時刷新技術,下面我們總結總結一下常用的幾種window.history.go(-1)返回頁面后實時刷新技術。

返回上一頁代碼:

<a href="Javascript:window.history.go(-1)">返回上一頁</a>

強制載入后刷新一次 

我們可以仿照C++中解決頭文件重復包含的方法,在C++中利用#ifndef A #define A #endif來解決頭文件的重復包含問題同樣我們采用如下方式

<script>
if(window.name != "bencalie"){
    location.reload();
    window.name = "bencalie";
}
else{
    window.name = "";
}
</script>

進行載入后強制刷新一次,相信如果你有編程經驗一定看的懂的,這里不做解釋!

捉鸡麻将单机版下载