У меня есть проект, в котором мне нужно загружать несколько изображений асинхронно. Он работал отлично везде (Chrome, Firefox, MacOS Safari, Android Chrome, iOS Safari на симуляторе iOS под управлением 11.4). Однако на моем iPhone с использованием iOS Safari (и нескольких других айфонов, на которых я пытался запустить 11.4) существующие запросы не выполнялись, когда я открывал средство выбора изображений / файлов.
С тех пор я перевел проблему в более простой код:
<html>
<head>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="/javascripts/main.js"></script>
</head>
<body>
<p>Upload Progress: <span id="status">Not Started</span></p>
<p>Blob Upload: <button id="blobUpload">Upload Blob</button></p>
<p>File Input: <input type="file" /></p>
</body>
</html>
Это main.js:
$(document).ready(() => {
$("#blobUpload").click(() => {
const status = document.getElementById("status");
status.innerHTML = "Started";
// Create an array about 2mb in size (similar to an image);
// and append it to a form data object
const intArray = new Uint8Array(2000000);
const blob = new Blob([intArray]);
const formData = new FormData();
formData.append('file', blob);
const request = new XMLHttpRequest();
request.upload.addEventListener('progress', (ev) => {
const percent = Math.round(ev.loaded / ev.total * 100);
status.innerHTML = percent + '%';
}, false);
request.upload.addEventListener('error', (ev) => {
status.innerHTML = '<span style="color: red">Network Error</span>';
});
request.open('POST', '/upload', true);
request.send(formData);
});
});
Если я нажму кнопку «Загрузить BLOB-объект», а затем больше ничего не сделаю, это будет работать 100% времени и никогда не даст сбой. Однако, если я нажимаю кнопку загрузки большого двоичного объекта, то во время загрузки я нажимаю на вход файла (который абсолютно не связан со всем остальным), выбираю один из пунктов меню (Снять фото или видео, Библиотека фотографий или Обзор), затем либо выберите что-то, или сделайте фотографию, или просто нажмите «Отмена», чтобы вернуться, загрузка BLOB-объекта завершится примерно 1/3 времени с сообщением «Не удалось загрузить ресурс: сетевое соединение было потеряно». ошибка. Неважно, что загружается (изображение, блоб или что-то еще).
Вот видео, показывающее, что происходит.
Прошло 2 дня, чтобы отладить это, и я не нашел НИЧЕГО интересного в моих исследованиях и, поверьте мне, я пытался. Любая помощь будет оценена. Начинаю верить, что это может быть просто ошибкой в Safari.