javascript跨域總結之window.name實現的跨域資料轉送_javascript技巧

來源:互聯網
上載者:User

自己實踐了一下,真的很好用。特將具體實現方法記錄如下

有三個頁面:

    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從外域傳遞到本地區。這個就巧妙地繞過了瀏覽器的跨域訪問限制,但同時它又是安全操作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.