Bạn có thể thực hiện yêu cầu trong javascript, đặt bất kỳ tiêu đề nào bạn muốn. Sau đó, bạn có thể URL.createObjectURL()
để nhận nội dung phù hợp với src
của khung nội tuyến.
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 :(');
}
}
}
Loại MIME của phản hồi được giữ nguyên. Vì vậy, nếu bạn nhận được phản hồi html, html sẽ hiển thị trong khung nội tuyến. Nếu bạn yêu cầu một pdf, trình xem pdf trình duyệt sẽ khởi động iframe.
Nếu đây là một phần của ứng dụng phía máy khách lâu đời, bạn có thể muốn sử dụng URL.revokeObjectURL()
để tránh rò rỉ bộ nhớ.
URL đối tượng cũng khá thú vị. Chúng có dạng blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170
. Bạn thực sự có thể mở chúng trong một tab mới và xem phản hồi, và chúng bị loại bỏ khi bối cảnh tạo ra chúng được đóng lại.
Dưới đây là một ví dụ đầy đủ: https://github.com/courajs/pdf-poc
Hi Niết, bạn có thể vui lòng cung cấp mã thực hiện mẫu trong JSFiddle –
Tôi tin rằng Niết nghĩa một cái gì đó như thế này http://stackoverflow.com/a/17695034/1524918 –
wouldn Yêu cầu trong tập lệnh tải trước như vậy được gửi đến một miền khác và do đó vi phạm Chính sách xuất xứ giống nhau? – mart1n