window.name實現跨域功能
本章節介紹一下如何實現window.name實現跨域效果。
關於window.name屬性的基本用法可以參閱window.name屬性簡單介紹一章節。
下面有三個頁面:
(1).a.com/app.html:應用頁面。
(2).a.com/proxy.html:代理檔案,一般是一個沒有任何內容的html檔案,需要和應用頁面在同一域下。
(3).b.com/data.html:應用頁面需要獲取資料的頁面,可稱為資料頁面。
實現步驟如下:
(1).在應用頁面(a.com/app.html)中建立一個iframe,把其src指向資料頁面(b.com/data.html)。資料頁面會把資料附加到這個iframe的window.name上,data.html程式碼如下:
[JavaScript] 純文字檢視 複製程式碼// 這裡是要傳輸的資料,大小一般為2M,IE和firefox下可以大至32M左右 // 資料格式可以自定義,如json、字串 window.name = '螞蟻部落歡迎您';
(2).在應用頁面(a.com/app.html)中監聽iframe的onload事件,在此事件中設定這個iframe的src指向本地域的代理檔案(代理檔案和應用頁面在同一域下,所以可以相互通訊)。app.html部分程式碼如下:
[JavaScript] 純文字檢視 複製程式碼var state = 0, iframe = document.createElement('iframe'), loadfn = function() { if (state === 1) { var data = iframe.contentWindow.name;// 讀取資料 alert(data);//彈出'螞蟻部落歡迎您' } 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);
(3).獲取資料以後銷燬這個iframe,釋放記憶體;這也保證了安全(不被其他域frame js訪問)。
[JavaScript] 純文字檢視 複製程式碼iframe.contentWindow.document.write(''); iframe.contentWindow.close(); document.body.removeChild(iframe);
總結起來即:iframe的src屬性由外域轉向本地域,跨域資料即由iframe的window.name從外域傳遞到本地域。這個就巧妙地繞過了瀏覽器的跨域訪問限制,但同時它又是安全操作。
相關文章
- window.name 跨域跨域
- window.name實現的跨域資料傳輸跨域
- asp.net WebService實現跨域js呼叫功能實現ASP.NETWeb跨域JS
- php實現SESSION跨域PHPSession跨域
- 九種方式實現跨域跨域
- Nginx反向代理實現跨域Nginx跨域
- nginx配置CORS實現跨域NginxCORS跨域
- 使用PHP實現跨域COOKIEPHP跨域Cookie
- bbossmvc結合jsonp實現跨站跨域應用間通訊功能介紹SSMMVCJSON跨域
- 跨域方案總結與實現跨域
- 九種跨域方式實現原理跨域
- 多種跨域方式實現原理跨域
- JSONP 跨域原理及實現JSON跨域
- 跨域訪問實現依據跨域
- Laravel 跨域功能中介軟體Laravel跨域
- CORS方式實現ajax跨域 — nginx配置CORS跨域Nginx
- jQuery Ajax 跨域前端實現登入jQuery跨域前端
- Laravel + JWT 實現 API 跨域授權LaravelJWTAPI跨域
- 用postMessage實現跨域通訊跨域
- JSONP原理及實現跨域方式JSON跨域
- Ajax+SpringMVC實現跨域請求SpringMVC跨域
- Spring Boot 通過CORS實現跨域Spring BootCORS跨域
- jquery 之 jsonp 與 laravel 實現跨域jQueryJSONLaravel跨域
- javascript如何實現跨域請求解決方案JavaScript跨域
- ajax跨域post請求,如何實現呢跨域
- 跨域-實踐篇跨域
- JavaScript 跨域訪問(API介面)實現原理分析JavaScript跨域API
- 九種跨域方式實現原理(完整版)跨域
- js實現的跨域呼叫flash解決方案JS跨域
- 簡單的實現jsonp跨域請求JSON跨域
- 使用CORS實現ajax跨域簡單介紹CORS跨域
- 跨域實踐二三事跨域
- JavaScript跨域(1):什麼是跨域,如何跨域JavaScript跨域
- 跨域問題(普通跨域和springsecurity跨域)跨域SpringGse
- zuul實現Cors跨域的兩種方式(https)ZuulCORS跨域HTTP
- Spring Cloud Gateway + oauth2 跨域配置實現SpringCloudGatewayOAuth跨域
- 實現跨域iframe介面方法呼叫 簡單介紹跨域
- ajax實現的跨域請求程式碼例項跨域