как вызвать stop () без принудительной ошибки в браузерах webkit

#javascript #url #try-catch

#javascript #url #попробуйте-поймайте

Вопрос:

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

 image.src='' 
  

было бы достаточно, но браузер все равно загружает изображение.

Итак, мое классное решение включает в себя размещение невидимого iFrame в теле и добавление к нему тега изображения, если я хочу остановить загрузку, я просто вызываю

 iframe.contentWindow.window.stop(); // and something similiar for IE 8
  

У меня есть все мое решение, но вызов stop () во время загрузки выдает это в chrome :

ПОЛУЧИТЬ http://xx.xx.com.au/images/products/1.png не определено (undefined) и это в safari :

Не удалось загрузить ресурс

в основном я спрашиваю, есть ли инструкция try-catch для этой проблемы

очевидно, я пытался try{iframe.contentWindow.window.stop(); }catch(e){}

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

Комментарии:

1. Вы могли бы уточнить, является ли это выгрузкой или скачиванием. Вы использовали оба слова, и разница довольно существенна.

2. Привет, я, кажется, не могу найти, где прокомментировать ваши сообщения, поэтому я отвечу здесь на IJW, мне очень жаль, я хотел оба раза ввести «загрузка». Я уверен, что мы все видели: var img = new Image();//сделать невидимым изображение img.src = ‘ image.imageserver.com/image.png ‘// получаем изображение img.onload=function(){//даем обратный вызов // какой-то обратный вызов } img.src=»// можно было бы надеяться остановить загрузку, но браузер все равно ее получает это позволяет кэшировать изображения до их отображения, то, что я делаю, является расширенной версией этого, которая позволяет вам вводить img.stop(), что фактически отменит выполнение

Ответ №1:

Я думаю, что вы, возможно, ошибаетесь с этим. По сути, вы не должны иметь возможность управлять браузером с помощью Javascript, просто влиять на рендеринг вашей собственной страницы. Такие вещи, как сетевое подключение, полностью управляются браузером за кулисами, поэтому все, что вы можете сделать, чтобы изменить это, вероятно, будет в некоторой степени подсказкой / взломом.

Я бы сделал шаг назад и подумал о семантике того, что вы пытаетесь сделать, с точки зрения веб-страницы. Как вы запускаете загрузку изображения? В зависимости от формата этой подсказки / запроса, семантика ее отмены, вероятно, будет другой.

Кроме того, какова ваша мотивация для отмены — экономия пропускной способности? У меня такое ощущение, что если вы скажете «загрузить это изображение» (например, отправить форму), то тот факт, что это может занять несколько секунд, является деталью реализации, к которой вы на самом деле не можете получить доступ через Javascript. Кроме того, что, если у пользователя есть строка T1, а загрузка изображения уже завершена к тому времени, когда вы хотите отменить?

Не зная специфики, но думая о протоколе запроса-ответа, естественным решением было бы впоследствии отправить сообщение со словами «на самом деле, удалите / проигнорируйте это изображение, которое я только что загрузил».

Я сомневаюсь в использовании Stop для этой цели, потому что:

  1. Это может привести к отмене всех сообщений на странице — это похоже на статический / глобальный метод в том смысле, что он будет очень плохо взаимодействовать с чем-либо еще на вашей странице. Это может включать другие элементы, ориентированные на клиента, которые вы туда поместили, или внешние вещи, такие как реклама (меньший доход для вас) или веб-отслеживание (неточные и спорадические данные для вас). Это просто плохой дизайн, чтобы убивать все, когда вы на самом деле хотите остановить только одну конкретную вещь.
  2. Я даже не уверен, нужно ли браузеру останавливать «фоновые» задачи при вызове Stop, поскольку обычно это команда chrome браузера, чтобы остановить изменение текущей страницы. В зависимости от того, как браузер рассматривает загрузку изображения (и как это запускается), он может интерпретировать команду Stop как означающую «не изменять страницу, на которой я нахожусь», и, таким образом, продолжить загрузку изображения.

Тот факт, что код «сложнее, чем кажется», также является предупреждением — добавление еще большего количества уровней усложнения вряд ли будет лучшим способом решения простого на вид требования. Сделайте шаг назад и снова расскажите об основах того, чего вы пытаетесь достичь, и о том, как вы можете «законно» попросить браузер сделать это через Javascript / HTML.