Очевидно, это ошибка Safari 12 , которая иногда происходит. Это не исправлено target = "_self"
, что относится к другой ошибке регрессии .
Пока ошибка не исправлена, уродливый обходной путь:
- Отправка большого двоичного объекта на сервер, который сохраняет файл удаленно.
- Скачать удаленный файл.
код Javascript
async createDownloadElementAndClick(blob, fileName) {
let options = {
method:"POST",
body:blob
};
await fetch(`https://example.com/upload.php`, options);
window.open(`https://example.com/download.php?${fileName}`, "_self");
}
код PHP
In upload.php:
<?php
// add any authentication code as necessary here
// gets entire POST body
$data = file_get_contents('php://input');
$filename = "temp/download.pdf";
// write the data out to the file
$fp = fopen($filename, 'wb');
fwrite($fp, $data);
fclose($fp);
?>
В download.php:
<?php
ob_start();
$file = $_SERVER["QUERY_STRING"];
// This is the line that tells Safari to download the file instead of opening it
header("Content-disposition: attachment; filename=$file");
header("Content-type: application/pdf", false);
readfile("temp/download.pdf");
ob_flush();
// This deletes the pdf so there is little chance of contaminating the next call
unlink("temp/download.pdf");
?>