Pertanyaan Apakah mungkin untuk menambahkan Request Headers ke permintaan iframe src?


Saya mengerti bahwa Anda dapat mengatur header permintaan HTTP dengan sangat mudah saat membuat panggilan AJAX di JavaScript.

Namun apakah itu juga mungkin untuk mengatur header permintaan HTTP kustom ketika memasukkan iframe ke halaman melalui skrip?

<iframe src="someURL"> <!-- is there any place to set headers in this? -->

32
2017-11-17 17:16


asal


Jawaban:


Tidak, kamu tidak bisa. Namun Anda bisa mengaturnya iframe sumber ke beberapa jenis skrip preload, yang menggunakan AJAX untuk mengambil halaman yang sebenarnya dengan semua tajuk yang Anda inginkan.


15
2017-11-17 17:18



Anda dapat membuat permintaan dalam javascript, mengatur tajuk apa pun yang Anda inginkan. Maka kamu bisa URL.createObjectURL(), untuk mendapatkan sesuatu yang cocok untuk src dari iframe.

var xhr = new XMLHttpRequest();

xhr.open('GET', 'page.html');
xhr.onreadystatechange = handler;
xhr.responseType = 'blob';
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.send();

function handler() {
  if (this.readyState === this.DONE) {
    if (this.status === 200) {
      // this.response is a Blob, because we set responseType above
      var data_url = URL.createObjectURL(this.response);
      document.querySelector('#output-frame-id').src = data_url;
    } else {
      console.error('no pdf :(');
    }
  }
}

Jenis respons MIME dipertahankan. Jadi, jika Anda mendapatkan respons html, html akan ditampilkan di iframe. Jika Anda meminta pdf, browser pdf viewer akan menendang iframe.

Jika ini adalah bagian dari aplikasi sisi klien yang berumur panjang, Anda mungkin ingin menggunakannya URL.revokeObjectURL() untuk menghindari kebocoran memori.

URL objek juga cukup menarik. Mereka dalam bentuk blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170. Anda sebenarnya dapat membukanya di tab baru dan melihat responsnya, dan mereka dibuang ketika konteks yang membuatnya ditutup.

Berikut contoh lengkapnya: https://github.com/courajs/pdf-poc


23
2018-02-16 17:22