2015-02-06 2 views
0

прямо сейчас Я использую следующий код JQuery, чтобы изменить все SRC-изображения на странице для доступа к другому серверу изображений, который имеет более высокий предел пропускной способности.Изменить изображение SRC до загрузки страницы оригинал src

$.each($("img"), function(index, value) { 
    srcValue = "http://different-server.com/" + $(this).attr("src") 
    $(this).attr("src", srcValue) 
}); 

Так

src="v/image1.jpg" 
src="v/image2.jpg" 
src="v/image2.jpg" 

бы стать:

src="http://different-server.com/v/image1.jpg" 
src="http://different-server.com/v/image2.jpg" 
src="http://different-server.com/v/image3.jpg" 

Клиент использует Volusion своей корзине. Они вынуждены размещать свою корзину покупок на серверах Volusion, что позволяет только 3gb использования полосы пропускания в месяц, и они много платят за переезд.

Тележка построена в ASP, но у меня нет доступа к страницам ASP, а только к файлам шаблонов, и нам не разрешено связывать изображения продуктов с внешним источником.

Я был в состоянии загрузить файлы изображений для продуктов корзины покупок и разместить их на другом хосте без ограничения пропускной способности, но я чувствую, что этот код изменяет src ПОСЛЕ того, как браузер загружает исходные SRC изображения, проблема использования полосы пропускания все еще присутствует.

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

Есть ли что-то еще, что я могу сделать, чтобы заставить изображение srcs быть изменено до загрузки страницы, поскольку у меня есть только доступ к редактированию файлов шаблонов?

спасибо.

+0

Почему вы не оставляете 'src' пустым в исходном HTML и заполняете его JS. – Barmar

+0

К сожалению, ограничения Volusion не позволяют мне это делать.В противном случае это будет хорошей идеей. Нам предоставляется только один html-файл для редактирования шаблона. Единственный способ добавить изображения на страницу тележки - пройти через их графический интерфейс и загрузить изображения на свой сервер. Поэтому я остался, чтобы попробовать более грязную тактику. – AndrewMRiv

ответ

0

С клиентского Javascript вы не можете изменить img.src в HTML-формате страницы, прежде чем браузер начнет ее загружать. Вы не сможете исправить свою проблему только на стороне Javascript на стороне клиента.

Причина в том, что вы не можете изменить объект DOM с помощью Javascript до тех пор, пока он не будет проанализирован браузером и не станет частью DOM, и к моменту завершения он может начать загрузите изображение с его исходного URL. Итак, вы застряли. Вы не можете добраться до него с помощью Javascript до тех пор, пока он не начнет загружаться, что означает, что ваш сервер с низкой пропускной способностью уже видел запрос, прежде чем вы сможете изменить URL-адрес.

Реальное решение здесь (я полагаю, вы знаете) заключается в изменении HTML-страницы для исправления URL-адресов. Или, если вы хотите, чтобы имя хоста для изображений было настроено с помощью Javascript, вы можете изменить теги img, чтобы использовать свойство data-src, а не свойство src, а затем вы можете использовать Javascript для установки свойства src на то, что вы хотели. Это будет работать, потому что, когда изображения не имеют свойства src, браузер может проанализировать тег <img>, но ничего не начнет загружать (поскольку нет свойства src).

Серверные прокси, настроенные на переписывание URL-адресов изображений, также могут быть использованы.

+0

У меня есть идея, где вы собираетесь с этим! Проблема в том, что при редактировании HTML мы можем только редактировать заголовок, меню, нижний колонтитул и т. Д., Но не область содержимого. В файле шаблона есть пустой div с классом «content_area», и все содержимое страницы попадает туда с ASP (к сожалению, я не могу получить доступ). Я не могу редактировать какой-либо из html для того, как изображения отображаются на странице, поскольку это попадает в контент, который помещается в div «content_area». Могу ли я как-то обойти это? – AndrewMRiv

+0

@AndrewMRiv - Я знаю, что вы не хотите, чтобы это было ответом, но «нет» нет работы на стороне клиента. Вы можете переписать URL-адреса изображений с помощью JS и «надеяться» на то, что он уменьшает используемую полосу пропускания, потому что, возможно, некоторые браузеры перестанут загружать изображения, которые были уже запущены, теперь, когда исходный URL был изменен. Но, честно говоря, это поведение будет отличаться от браузера к браузеру (вам нужно будет протестировать с неэкранированными изображениями, чтобы увидеть, хорошо ли это), но он, конечно же, не будет препятствовать использованию с сервера с низкой пропускной способностью, и, честно говоря, я понятия не имею если это даже уменьшит использование полосы пропускания. – jfriend00

+0

@AndrewMRiv - FYI, есть вероятные законные причины безопасности, по которым поставщик не хочет загружать ресурсы из внешней сети в корзину. Нет никаких веских причин для ограничения использования полосы пропускания для такого низкого числа - есть лучшие поставщики, которые не будут этого делать или будут иметь гораздо более разумную плату за пропускную способность. – jfriend00

1

Каждый продукт Volusion имеет два поля, в которых вы можете указать URL-адрес, URL-адрес фотографии Small и Photo Large. Это может указывать на внутреннее или внешнее местоположение для изображений продукта.

Смежные вопросы