window.name實現的跨域資料傳輸
這篇文章是對 JavaScript跨域總結與解決辦法 的補充。
有三個頁面:
- a.com/app.html:應用頁面。
- a.com/proxy.html:代理檔案,一般是一個沒有任何內容的html檔案,需要和應用頁面在同一域下。
- b.com/data.html:應用頁面需要獲取資料的頁面,可稱為資料頁面。
實現起來基本步驟如下:
-
在應用頁面(a.com/app.html)中建立一個iframe,把其src指向資料頁面(b.com/data.html)。
資料頁面會把資料附加到這個iframe的window.name上,data.html程式碼如下:<script type="text/javascript"> window.name = 'I was there!'; // 這裡是要傳輸的資料,大小一般為2M,IE和firefox下可以大至32M左右 // 資料格式可以自定義,如json、字串 </script>
-
在應用頁面(a.com/app.html)中監聽iframe的onload事件,在此事件中設定這個iframe的src指向本地域的代理檔案(代理檔案和應用頁面在同一域下,所以可以相互通訊)。app.html部分程式碼如下:
<script type="text/javascript"> var state = 0, iframe = document.createElement('iframe'), loadfn = function() { if (state === 1) { var data = iframe.contentWindow.name; // 讀取資料 alert(data); //彈出'I was there!' } else if (state === 0) { state = 1; iframe.contentWindow.location = "http://a.com/proxy.html"; // 設定的代理檔案 } }; iframe.src = 'http://b.com/data.html'; if (iframe.attachEvent) { iframe.attachEvent('onload', loadfn); } else { iframe.onload = loadfn; } document.body.appendChild(iframe); </script>
-
獲取資料以後銷燬這個iframe,釋放記憶體;這也保證了安全(不被其他域frame js訪問)。
<script type="text/javascript"> iframe.contentWindow.document.write(''); iframe.contentWindow.close(); document.body.removeChild(iframe); </script>
總結起來即:iframe的src屬性由外域轉向本地域,跨域資料即由iframe的window.name從外域傳遞到本地域。這個就巧妙地繞過了瀏覽器的跨域訪問限制,但同時它又是安全操作。
相關文章
- window.name 跨域跨域
- 跨國大檔案傳輸需要哪些方面?怎麼實現資料快速傳輸?
- HarmonyOS跨裝置通訊:多端協同的RPC資料傳輸實現RPC
- 完成資料的跨界傳輸與驗證
- Xamarin Essentials教程實現資料的傳輸功能例項
- 跨網域檔案傳輸新策略:限速技術讓資料流動更高效!
- 資料出境難?如何打破跨國檔案傳輸的困局?
- vue---axios實現資料互動與跨域問題VueiOS跨域
- csv跨域傳輸再生成csv檔案處理跨域
- jsonp跨域獲取資料實現百度搜尋JSON跨域
- 用傳輸表空間跨平臺遷移資料
- 資料無界:大型企業如何實現多區域檔案安全傳輸的無縫體驗?
- 九種方式實現跨域跨域
- Nginx反向代理實現跨域Nginx跨域
- JSONP 跨域原理及實現JSON跨域
- 叮咚!您有一份跨網域跨安全域檔案傳輸方案待查收
- 簡單的實現jsonp跨域請求JSON跨域
- 跨域方案總結與實現跨域
- 多種跨域方式實現原理跨域
- 九種跨域方式實現原理跨域
- iPaas資料傳輸的方式
- 前後分離實現中,後臺 Laravel 接收資料的跨域解決方案Laravel跨域
- 【資料遷移】XTTS跨平臺傳輸表空間(1.傳統方式)TTS
- 跨國檔案傳輸軟體有哪些?跨國檔案傳輸遇到的問題
- 企業在跨國傳輸大資料會遇到哪些困難?大資料
- 【流式傳輸】使用Spring Boot實現ChatGpt流式傳輸Spring BootChatGPT
- 鐳速傳輸是如何管理大檔案跨國傳輸的
- 【乾貨分享】Ftrans安全資料交換系統 搭建跨網資料傳輸通道
- zuul實現Cors跨域的兩種方式(https)ZuulCORS跨域HTTP
- CORS方式實現ajax跨域 — nginx配置CORS跨域Nginx
- Ajax+SpringMVC實現跨域請求SpringMVC跨域
- Laravel + JWT 實現 API 跨域授權LaravelJWTAPI跨域
- Spring Boot 通過CORS實現跨域Spring BootCORS跨域
- jquery 之 jsonp 與 laravel 實現跨域jQueryJSONLaravel跨域
- jQuery Ajax 跨域前端實現登入jQuery跨域前端
- Minya 分層框架實現的思考(二):構建依賴及資料傳輸框架
- 【分段傳輸】c#使用IAsyncEnumerable實現流式分段傳輸C#
- 【資料遷移】XTTS跨平臺傳輸表空間v4TTS
- 鐳速-跨國車企資料高速、安全跨境傳輸解決方案