Остановите загрузку изображений в событии hashchange через JavaScript или jQuery - PullRequest
5 голосов
/ 30 июня 2010

Я использую плагин jQuery BBQ: Back Button & Query Library для создания страницы, которая извлекает динамическое содержимое при нажатии на ссылку. При щелчке по ссылке хэш изменяется и добавляется новый контент (поэтому действие по умолчанию при нажатии на ссылку неактивно).

Эта часть работает просто отлично, но есть проблема.

Пример моей проблемы


Скажем, на "домашней" странице есть DIV, несколько изображений и список ссылок ...

  • Первая страница
  • Страница вторая
  • Страница третья

Загрузка изображений может занять некоторое время, тем временем пользователь часто не будет ждать, пока они загрузятся полностью, и нажимает ссылку «Первая страница».

Это очищает содержимое «домашней» страницы и загружает содержимое «первой страницы». Это отлично работает.

Проблема в том, что изображения со «домашней» страницы все еще загружаются в браузер, даже если пользователь перешел со «домашней» страницы.

Я знаю, что это происходит, потому что страница на самом деле не изменилась, и я использую взлом хеш-кода плагина BBQ, но я хочу знать, есть ли способ в JavaScript, чтобы сообщить всем изображениям, которые в данный момент загружаются в stop для события hashchange ?

?? Пример кода будет похож на ...


$(window).bind('hashchange', function () {

    //code to stop images from loading

    // now load in new HTML content

});

Ответы [ 2 ]

8 голосов
/ 09 июля 2010

Я протестировал это решение в WebKit (Chrome / Safari), Firefox и IE, и, похоже, оно работает.

Я использовал функцию, которая использует window.stop (); для большинства браузеров, и собственный способ IE сделать это, если браузер не поддерживает window.stop ()

Подробнее здесь: https://developer.mozilla.org/en/DOM/window.stop

Итак, для браузеров, которые его поддерживают (Firefox, WebKit), используйте:

window.stop();

Для использования IE:

document.execCommand("Stop", false);

Однако будьте осторожны ...

Это в основном похоже на нажатие кнопки «Стоп» в браузере, поэтому все загружаемое в настоящее время будет останавливаться, а не только изображения (как я и хотел).

Итак, внутри ...

$(window).bind('hashchange', function () {

});

Вот функция, которую я использовал ...

function stopDownloads() {
    if (window.stop !== undefined) {
        window.stop();
    }
    else if (document.execCommand !== undefined) {
        document.execCommand("Stop", false);
    }   
}
1 голос
/ 30 июня 2010

Я довольно уверен, что это невозможно (но был бы рад, если бы докажет, что ошибался).

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

Теперь, если это возможно , я бы предположил, что это будет связано либо с прохождением каждого изображения и обнулением его атрибута src (что, как я уже сказал, не сработает запросы уже отправлены). Либо это, либо вызов какого-то (вероятно, зависящего от браузера) механизма, который останавливает загрузку изображения.

...