Помешает ли изменение атрибута src изображения загрузить его? - PullRequest
7 голосов
/ 12 сентября 2011

Допустим, у меня есть две гармошки. Первый загружает сотни изображений и открывается при загрузке страницы.

Я хочу иметь возможность остановить загрузку изображений, если пользователь нажимает на второй вкладке аккордеона. Поможет ли изменение атрибутов src изображений через js остановить загрузку изображений? Или запросы просто продолжаются до завершения и не отображаются на странице?

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Ваш браузер запрашивает это изображение с определенным HTTP-запросом GET, как указано в протоколе HTTP.Как только он запрашивает его, http-сервер начинает передачу.

Таким образом, это происходит между браузером (в качестве http-клиента) и http-сервером.

Поскольку протокол http не учитываетЧтобы прервать передачу, браузер должен реализовать нестандартный механизм программного прерывания соединения.Но так как это не указано ни в одном стандарте, я думаю, вы не найдете способа сделать это с помощью JavaScript или любого клиентского кода.


Вы можете попробовать окно.stop (), чтобы остановить все запросы, но не отдельные.


Если вы хотите остановить один запрос на большое изображение, вы можете загрузить его вдокумент внутри скрытой рамки.Событие onload IFRAME можно использовать для загрузки изображения в основной документ, к которому время должно быть кэшировано (при условии, что для этого настроены директивы кэширования).

Если изображение принимаетслишком долго, тогда вы можете получить доступ к содержимому окна IFRAME и выполнить для него команду остановки.

Вам необходимо иметь столько элементов IFRAME, сколько имеется изображений, которые можно запрашивать одновременно.

Взят прямо с здесь & здесь .

2 голосов
/ 12 сентября 2011

У меня есть скрипт, который загружает логотип SO ровно за 3 секунды, которые я создал для другого вопроса.

http://alexturpin.net/slowimage/slowimage.php

Используя его, я попытался воспроизвести проблему:

var img = new Image();
img.onload = function() {
    alert("loaded");
};
img.src ="http://alexturpin.net/slowimage/slowimage.php";

setTimeout(function() {
    img.src = "";
}, 1000);

http://jsfiddle.net/Xeon06/RrUvd/1/

Насколько я понимаю, в Chrome onload не срабатывает, но браузер продолжает показывать счетчик и, если я иду в сетьвкладку и найдите мое изображение и проверьте его содержимое, оно есть.Поэтому мой ответ будет нет , изображение все еще загружается, по крайней мере, в Chrome.

Это интересная проблема, я предлагаю вам попробовать и протестировать ее в максимально возможном количестве браузеров и написатькакая-то запись в блоге об этом.

0 голосов
/ 12 сентября 2011

Не уверен, что так и будет, как и другие комментарии. Но я могу предложить подход, который будет работать хорошо. Предполагая, что не все изображения видны, просто установите правильный атрибут src, когда они станут видимыми.

Так что по умолчанию URL-адрес myGray.gif, когда он не виден, и установите его в myImage.jpg, когда он появится.

Когда вы закрываете текущий аккордеон, вы можете снова установить источник изображения на свой легкий GIF. (это предотвращает ошибку, связанную с gc в некоторых версиях ipad).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...