Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Предотвращение загрузки картинок на странице (https://javascript.ru/forum/misc/19227-predotvrashhenie-zagruzki-kartinok-na-stranice.html)

yarosh 29.07.2011 13:02

Предотвращение загрузки картинок на странице
 
Необходимо сделать чтобы картинки которые находятся на странице не загружались браузером. В идеале это должно касаться только тех картинок которые расположены на других сайтах. Пробовал отключить их через смену атрибута src но ничего не получилось:

<script type="text/javascript">
	var imgsrc = document.getElementByTagName('img');
for (var i = 0; i < imgsrc.lenth; i++)
{
	//imgsrc[i].src='x';
	imgsrc[i].setAttribute('src', '');
}
</script>


ЗЫ Где вставлять такой код? в <head>, после <body> или перед </body>?

розовый слоник 29.07.2011 13:04

setAttribute - лучше не использовать как по мне :)

вот так должно работать
imgsrc[i].src = '';

вставить все равно куда можно код будет работать везде. но если вставите в хед то нужно сделать window.onload так как загрузка страницы происходит синхронно. По этому как только браузер дойдет до вашего скрипта боди еще будет пусто и скрипт не отработает так как length будет равно нулю.
но можете скрипт вставить вконец боде и тогда не потребуется ждать загрузки страницы

yarosh 29.07.2011 13:07

Цитата:

Сообщение от розовый слоник (Сообщение 116046)
setAttribute - лучше не использовать как по мне :)

вот так должно работать
imgsrc[i].src = '';

Так тоже пробовал не хочет работать.
Я вставляю после <body>. Может надо где-то в другом месте?

розовый слоник 29.07.2011 13:10

поставте тогда debugger и проверьте что у вас получается) и сразу все будет ясно) и вообще учитесь отлаживать скрипты

yarosh 29.07.2011 13:17

<script type="text/javascript">
	var imgsrc = document.getElementsByTagName('img');
for (var i = 0; i < imgsrc.lenth; i++)
{
	imgsrc[i].src = '';
	//imgsrc[i].setAttribute('src', '');
}
</script>

</body>
</html>


какой debugger поставить?

В консоле JAVAscript (Google Chrome) не показывает ошибку

розовый слоник 29.07.2011 13:26

ну да она и не будет показыть ошибку потому что var imgsrc = [] то есть пустой массив)
я конечно не проверял но в этом уверен
поставте слово debugger после объявление переменной imgsrc и посмотрите чему она равна

melky 29.07.2011 13:28

вставлять перед закрывающим body

как я понял, вы так поставили

<body>
*!*<script></script>*/!*

....
</body>

yarosh 29.07.2011 14:32

Вставлен перед </body>
<script type="text/javascript">
	var imgsrc = document.getElementsByTagName('img');
	debugger;
for (var i = 0; i < imgsrc.lenth; i++)
{
	imgsrc[i].src = '';
	//imgsrc[i].setAttribute('src', '');
}
</script>


В консоле показал
Цитата:

imgsrc: NodeList[294]

yarosh 29.07.2011 15:30

С заменой уже разобрался
а как выделить src которые идут на сторонние ресурсы и заменить только их. Как я понимаю то все картинки находящиеся на других сайтах будут начинаться в src с "http://" но при этом будут отличаться началом от "http://site.com/"

PS
Странно похоже несмотря на то что заменил все ссылки картинок, картинки похоже всё равно загружаются браузером, а надо добиться чтобы этого небыло, но как это сделать?

yarosh 29.07.2011 16:23

Со скриптом уже разобрался, но он не работает так как хотелось бы.
Картинки внешние меняет, НО браузер всё равно подгружает картинки которые были зменены скриптом.

Кто нибудь знает как можно запретить загрузку картинок браузеру через JAVAscript?

yarosh 30.07.2011 02:10

Похоже никто не знает как это сделать или это в принципе невозможно?

monolithed 30.07.2011 02:23

Цитата:

Сообщение от yarosh
Кто нибудь знает как можно запретить загрузку картинок браузеру через JAVAscript?

используйте событие onabort

Aetae 30.07.2011 02:49

Можно конечно извратиться на что-то подобное:
window.onload=function(){
  var i=document.getElementsByTagName('img'), t;
  (function img(){
    while(i[0])i[0].parentNode.removeChild(i[0]);
    t=setTimeout(img,1)
  })()
  return function(){clearTimeout(t)}
}()
но оно всё равно будет грузиться, ибо задача в принципе не имеет смысла в нормальной ситуации: откуда на твоём сайте взяться вдруг не нужным картинкам?

yarosh 30.07.2011 02:56

Картинки не мне не нужны, а гуглу надо чтобы страница быстрее грузилась

Aetae 30.07.2011 03:00

0_o Э...мнм.. кхм..?

yarosh 30.07.2011 03:01

Что-то не вижу что onabort поможет т.к. он не запрещает(отменяет) заргузку картинки, а реагирует когда останавливается загрузка картинки и выполняет соответствующий код

melky 30.07.2011 10:24

загрузку картинок нельзя запретить через JavaScript. Aetae тебе уже написал код, который удалит все картинки со страницы.

Aetae 30.07.2011 11:20

Цитата:

Сообщение от melky (Сообщение 116263)
загрузку картинок нельзя запретить через JavaScript. Aetae тебе уже написал код, который удалит все картинки со страницы.

...по мере их появления в DOM, по идее)

dmitriymar 30.07.2011 11:31

Цитата:

Сообщение от yarosh
а гуглу надо чтобы страница быстрее грузилась

а что это даст? для поисковиков? если да,то поисковики просматривают с отключённым скриптом(но анализируют частично его-переходы ,открытие окон..). так что любые извращения со скриптом не будут гуглом оценены-поскольку они при работе паука не работают.....

mister_maxim 24.03.2015 20:32

Цитата:

Сообщение от Aetae (Сообщение 116251)
но оно всё равно будет грузиться, ибо задача в принципе не имеет смысла в нормальной ситуации: откуда на твоём сайте взяться вдруг не нужным картинкам?

Вот у меня случай такой, я не хочу исправлять сторонний серверный движок MERUERT CMS на php, делаю на нём простенький интернет-магазин. И всегда пытаюсь выкручиваться javascriptoм где только можно.
Так и вот, задача стоит такая, есть лента из множества постов (товаров), каждый пост раскрывается в подробнее, и там уже есть большие фотографии, но по безлаберности разработчика, эти большие фотографии выдаются от php в самой ленте, что недопустимо вот и задача... - как-то вначале на яваскрипте обработать всё то, что выдал мне php, поубирать эти большие картинки, оставить лишь миниатюрные, так чтобы большие картинки не грузились, и лишь затем пустить на исполнение оставшегося и обработанного контента браузером.

laimas 24.03.2015 21:45

Может заняться разумным и все-таки править серверную часть?
Ну до абсурда доходит. Да и для простенького магазина не нужна CMS чья-то, можно и самому написать.

danik.js 24.03.2015 21:52

mister_maxim, смотри выше, уже сказали - нельзя на js отменить загрузку. Ну вообще, есть один способ, но я бы его не рекомендовал. И даже рассказывать о нем не буду )

MallSerg 25.03.2015 19:59

Браузер парсит ХТМЛ и тут же отправляет запросы если встретит тег img.
Решение в том что бы изменить такое поведение ).
Например с помощью document.stop и запросом из JS получить данную страницу как текст и регудярками подправить картинки .)
В принципе одна из крайних форм извращений нотдолжно работать.

Или же через document.write открыть хтмл коментарий а потом закрыть это также поможет обойти парсер. Естественно комментарий нужно будет от фильтровать и вернуть в страницу.


Карма не найдена =(

MallSerg 25.03.2015 20:14

Цитата:

Сообщение от mister_maxim
Вот у меня случай такой, я не хочу исправлять сторонний серверный движок MERUERT CMS на php, делаю на нём простенький интернет-магазин. И всегда пытаюсь выкручиваться javascriptoм где только можно.


Выкручусь на JS

danik.js 25.03.2015 21:38

Цитата:

Сообщение от MallSerg
document.stop и запросом из JS получить данную страницу

Не всегда. Очень часто сервер выдает разное содержимое в ответ на один и тот же запрос. Допустим ротация баннеров, или последние комментарии и тд.

Цитата:

Сообщение от MallSerg
Или же через document.write открыть хтмл коментарий а потом закрыть это также поможет обойти парсер

Именно. Только не комментарий, а <plaintext>. Потому что вложенный комментарий все сломает, а <plaintext> не имеет закрывающего тега.
Есть даже готовый плагин для этого. Не помню что он делает. Кажется lazyload картинок.

melky 28.03.2015 13:36

Цитата:

Сообщение от MallSerg (Сообщение 363128)

Выкручусь на JS

чёрт, какая хорошая пикча. +100500!

tsigel 29.03.2015 08:17

Еще можно выкрутиться заменив теги img на бакграунды. Браузер скачивает картинки всех img сразу а из того что прописано стилями качает только то, что не display:none. То есть в таком случае он будет скачивать картинки по мере раскрытия комментариев. Только у картинок заданных через стили будет неудобно отслеживать событие загрузки. Конечно самое разумное делать это на сервере. Только заменять картинки надо всё равно на сервере.


Часовой пояс GMT +3, время: 11:53.