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

2019-08-12 12:47:19 86

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

在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>

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

北京时时彩pk10 pk10精准计划软件手机ios 6码复式二中二怎么算 广西快乐10分旧走势图 2018二肖中特顶尖一吗 开心农场下载最新版 泰山棋牌游戏大厅 福建体彩11选5技巧 30个码投资方法 太阳能发电怎么赚钱 现在的社会学点什么好赚钱 内蒙古快3网上投注 时时彩后二稳赚不赔 香港两码中特 11选5前三组10码 pk10号码规律走势 对战牛牛797 pk10精准计划软件手机ios 6码复式二中二怎么算 广西快乐10分旧走势图 2018二肖中特顶尖一吗 开心农场下载最新版 泰山棋牌游戏大厅 福建体彩11选5技巧 30个码投资方法 太阳能发电怎么赚钱 现在的社会学点什么好赚钱 内蒙古快3网上投注 时时彩后二稳赚不赔 香港两码中特 11选5前三组10码 pk10号码规律走势 对战牛牛797