как вызвать stop (), не вызывая ошибку в браузерах webkit - PullRequest
0 голосов
/ 25 мая 2011

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

image.src='' 

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

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

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

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

GET http://xx.xx.com.au/images/products/1.png не определено (не определено) и это в сафари:

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

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

очевидно, я пытался пытаться{ iframe.contentWindow.window.stop (); } Поймать (е) {}

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

1 Ответ

0 голосов
/ 25 мая 2011

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

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

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

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

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

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

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

...