Iframe src устанавливает большие данные base64

У меня есть iframe для предварительного просмотра PDF и тонна данных base64 (более 10 МБ).

<iframe src="" type="application/pdf"></iframe>'

Как я могу использовать эти данные? Когда я пытаюсь установить данные:

$("iframe").attr("src", data);

В некоторых браузерах происходит сбой.

У меня нет ссылки src. Эти данные получил ajax. Какие-либо предложения?

4 ответа

Попробуйте это: может быть, уже слишком поздно

<iframe src="data:application/pdf;base64,YOUR_BINARY_DATA" height="100%" width="100%"></iframe>

Если вам нужно получить через AJAX, чтобы установить заголовки или что-то, проверьте URL.createObjectURL(), Учитывая кусок байтов, он может дать вам что-то подходящее для src из фрейма.

var xhr = new XMLHttpRequest();

xhr.open('GET', 'some.pdf');
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 :(');
    }
  }
}

URL объекта довольно интересны. Они в форме blob:https://your.domain/1e8def13-3817-4eab-ad8a-160923995170, Вы можете фактически открыть их в новой вкладке и увидеть ответ, и они отбрасываются, когда контекст, который их создал, закрыт.

Вот полный пример: https://github.com/courajs/pdf-poc

У меня нет ссылки src. Эти данные получил ajax.

Если вы загружаете данные с помощью AJAX, вы сможете передавать тот же URL-адрес непосредственно в iframe, минуя загрузку данных AJAX и $("iframe).attr("src", data) фазы. Если этот AJAX-запрос возвращает только данные base64, вам не нужно делать запрос. Просто установите set iframe src на этот URL напрямую, и он должен работать.

Не уверен, в чем конкретно проблема, но вот jsFiddle, который является примером того, как вы можете использовать iframe + настройка его src используя jQuery:

Могут быть другие проблемы, вызывающие сбои браузера на вашем конце, которые не связаны с настройкой src на iframe.

Другие вопросы по тегам