Ответ 1
Причина, вероятно, в расширении adblock (у меня была точно такая же проблема).
Я хочу открыть PDF файл на новой вкладке в браузере Chrome (Chrome 56.0.2924.87, Ubuntu 14.04), используя window.open(fileObjectURL)
в javascript. Я создаю blob из кодированных данных base64 и создаю объектURL следующим образом:
const fileObjectURL = URL.createObjectURL(fileBlob);
Он отлично работает в последнем браузере Firefox. Но в Chrome я вижу, что новая вкладка открывается, а затем закрывается немедленно. Поэтому я не вижу ошибок в консоли и т.д.
Единственный способ, которым он теперь работает в Chrome, - предоставить данные base64 непосредственно функции window.open(fileBase64Data)
. Но мне не нравятся полные данные, заданные в URL-адресе.
Возможно, это проблема безопасности с блокировкой Chrome блокировки?
Причина, вероятно, в расширении adblock (у меня была точно такая же проблема).
Вы должны открыть новое окно, прежде чем помещать URL-адрес BLOB-объекта в окно:
let newWindow = window.open('/')
Также вы можете использовать другую страницу, например /loading
, с индикатором загрузки.
Затем вам нужно дождаться загрузки нового окна, и вы можете нажать URL вашего BLOB файла в этом окне:
newWindow.onload = () => {
newWindow.location = URL.createObjectURL(blob);
};
Расширение Adblock не блокируйте его.
Я использую его с генераторами AJAX и ES, например:
let openPDF = openFile();
openPDF.next();
axios.get('/pdf', params).then(file => {
openPDF.next(file);
});
function* openFile() {
let newWindow = window.open('/pages/loading');
// get file after .next(file)
let file = yield;
// AJAX query can finish before window loaded,
// So we need to check document.readyState, else listen event
if (newWindow.document.readyState === 'complete') {
openFileHelper(newWindow, file);
} else {
newWindow.onload = () => {
openFileHelper(newWindow, file);
};
}
}
function openFileHelper(newWindow, file) {
let blob = new Blob([file._data], {type: '${file._data.type}'});
newWindow.location = URL.createObjectURL(blob);
}
селям
blob:http://***.***.***.**/392d72e4-4481-4843-b0d4-a753421c0433
BLOB-объекты не блокируются Chrome, но блокируются расширением AdBlock.
Обойти способ пройти adblocker.
Coffeescript и JQuery
$object = $("<object>")
$object.css
position: 'fixed'
top: 0
left: 0
bottom: 0
right: 0
width: '100%'
height: '100%'
$object.attr 'type', 'application/pdf'
$object.attr 'data', fileObjectURL
new_window = window.open()
new_window.onload = ->
$(new_window.document.body).append $object