1. 程式人生 > 其它 >跨域訪問方法介紹(4)--使用 window.name 傳值

跨域訪問方法介紹(4)--使用 window.name 傳值

瀏覽器視窗有 window.name 屬性。這個屬性的最大特點是,無論是否同源,只要在同一個窗口裡,前一個網頁設定了這個屬性,後一個網頁可以讀取它。這種方法的優點是,window.name 容量很大,可以放置非常長的字串;缺點是必須監聽子視窗 window.name 屬性的變化,影響網頁效能。本文主要介紹使用 window.name 來實現跨域資料傳遞,文中所使用到的軟體版本:Chrome 90.0.4430.212。

1、步驟說明

在 a.html(http://localhost:8080/a.html) 頁面開啟 c.html(http://localhost:9090/c.html) 頁面,c.html 頁面設定 window.name 屬性並跳轉到 b.html(http://localhost:8080/a.html),此時在 a.html 頁面就可以獲取到 c.html 頁面設定的 window.name 屬性的值。

2、a.html(http://localhost:8080/a.html)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>window.name 測試</title>

</head>
<body>
    <button onclick="openChild()">開啟子頁面</button>
</body>

<
script type="text/javascript"> function openChild() { let childWindow = window.open("http://localhost:9090/c.html"); //監聽子視窗window.name的變化 let interval = setInterval(function(){ //子視窗window.name發生變化,停止定時任務 if (childWindow.name) { clearInterval(interval); console.log(childWindow.name); childWindow.close(); } },
2000); } </script> </html>

3、b.html(http://localhost:8080/b.html)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>代理頁面</title>
<script type="text/javascript">
    alert(window.name);    
</script>
</head>
<body>
    操作成功。該頁面即將自動關閉...
</body>
</html>

4、c.html(http://localhost:9090/c.html)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>資料</title>

<script type="text/javascript">
    //模擬使用者操作後,頁面跳轉
    setTimeout(function() {
        window.name = "你好";
        window.location.href = "http://localhost:8080/b.html";    
    }, 3000);
</script>
</head>
<body>
   資料...
</body>

</html>

5、測試

把 a.html 和 b.html 放到 tomcat (埠:8080) 的webapps\ROOT 下,c.html 放到另一個tomcat(埠:9090) 的webapps\ROOT 下。