Rumah  >  Artikel  >  hujung hadapan web  >  Ringkasan merentas domain JavaScript: penghantaran data merentas domain dilaksanakan oleh kemahiran window.name_javascript

Ringkasan merentas domain JavaScript: penghantaran data merentas domain dilaksanakan oleh kemahiran window.name_javascript

WBOY
WBOYasal
2016-05-16 15:34:281220semak imbas

Saya mencubanya sendiri dan ia berfungsi dengan baik. Kaedah pelaksanaan khusus direkodkan seperti berikut

Terdapat tiga muka surat:

a.com/app.html: Halaman aplikasi.
a.com/proxy.html: Fail proksi, biasanya fail html tanpa sebarang kandungan, perlu berada dalam domain yang sama dengan halaman aplikasi.
b.com/data.html: Halaman di mana halaman aplikasi perlu mendapatkan data boleh dipanggil halaman data.

Langkah asas untuk melaksanakan adalah seperti berikut:

Buat iframe dalam halaman aplikasi (a.com/app.html) dan halakan srcnya ke halaman data (b.com/data.html).
Halaman data akan menambahkan data pada window.name iframe ini Kod data.html adalah seperti berikut:

  <script type="text/javascript">
    window.name = 'I was there!';  // 这里是要传输的数据,大小一般为2M,IE和firefox下可以大至32M左右
                     // 数据格式可以自定义,如json、字符串
  </script>

Dengar acara onload iframe dalam halaman aplikasi (a.com/app.html Dalam acara ini, tetapkan src iframe ini untuk menghala ke fail proksi domain tempatan (fail proksi dan halaman aplikasi berada di bawah domain yang sama, jadi anda boleh berkomunikasi antara satu sama lain). Sebahagian daripada kod dalam app.html adalah seperti berikut:

<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>

Musnahkan iframe selepas mendapatkan data dan lepaskan memori ini juga memastikan keselamatan (tidak diakses oleh bingkai domain lain).

<script type="text/javascript">
    iframe.contentWindow.document.write('');
    iframe.contentWindow.close();
    document.body.removeChild(iframe);
  </script>

Ringkasnya: atribut src iframe dipindahkan dari domain luaran ke domain tempatan dan data merentas domain dipindahkan dari domain luaran ke domain tempatan melalui window.name iframe. Ini dengan bijak memintas sekatan akses merentas domain penyemak imbas, tetapi pada masa yang sama ia adalah operasi yang selamat.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn