javascript利用location.hash跨域傳輸資料

來源:互聯網
上載者:User

 

之前已經寫了利用window.name來跨域傳輸資料,location.hash方法的原理也類似,同樣是利用location.hash改變後不會重新整理的特徵,通過引用外域的資料頁面修改首頁面的location.hash來達到傳輸資料的目的。

同樣是三個頁面:111cn.net /main.html(首頁面)、111cn.net /proxy.html(被代理頁面)、b.com/data.html(外域的資料頁面)

1.本域首頁面main.html的代碼

var iframe = document.createElement("iframe");
iframe.src = "http://www.b.com/data.html";
if (window.VBArray) {   // 如果是IE
    iframe.onreadystatechange = function () {
        if (iframe.readyState === 'complete') {
            alert(location.hash);
        }
    };
} else {
    iframe.onload = function () {
        alert(location.hash);
    };
}
document.body.appendChild(iframe);

2.外域的data.html的代碼如下

var data = "some datas";
try {
    parent.location.hash = data;
} catch (e) {
    var iframe = document.createElement("iframe");
    iframe.src = "http://www.111cn.net /proxy.html#" + data;
    document.body.appendChild(iframe);
}

3.本域的代理頁面proxy.html的代碼如下

// 因為兩個頁面都是同一個域,所以可以設定main.html的hash值

parent.parent.location.hash = self.location.hash;

和window.name跨域傳輸資料一樣的缺點,傳輸的資料是字串類型的,如果要傳JSON資料,首先要在data.html轉換成字串,然後在main.html在轉換回來,而且資料都暴露在url中,還一個限制就是就是URL的長度限制,最短的IE只能2048個字元,這可不能傳太多的資料。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.