как установить фоновое изображение элемента с уже загруженным изображением в DOM? - PullRequest
2 голосов
/ 01 августа 2011

У меня уже есть загруженное изображение в DOM, на которое ссылается переменная img.

Я хочу установить фоновое изображение элемента для загруженного изображения в DOM.

если я просто делаю "background-image: url ('" + img.src + "')" проблема в том, что это зависит от того, кешируется ли изображение браузером (для пользовательских агентов, которые явно не хранят кеш, или кеш макс. размер 0, в основном, прикрученный)

Если изображение не кэшируется браузером, будет запрошено новое изображение (что, очевидно, я и пытаюсь предотвратить, так как изображение уже находится в доме и повторно запрашивает егопросто не нужно)

как установить фоновое изображение элемента с уже загруженным изображением в DOM?

Простой тестовый сценарий для подтверждения повторного запроса изображения ((используйте браузер, в котором вы можете очистить кеш для проверки) http://qweop.com/test/cache.php:

<!doctype html><html>
<head></head>
<body onload="load();" >
Step 0. Open your network inspector.<br>
Step 1. Wait for image to finish loading.<br>
Step 2. Clear your browser's cache (do not refresh this page);<br>
<button disabled="disabled" id="button" onclick="
    document.getElementById('div').style.backgroundImage='url('+document.getElementById('img').src+')';
">Step 3. After Cache is cleared, click</button>
<br>
<img id="img" width="500" height="500"  src="http://upload.wikimedia.org/wikipedia/commons/archive/4/4e/20090223155149!Pleiades_large.jpg" onload="
    document.getElementById('button').disabled='';"
/>
<div id="div" style="display:inline-block;width:500px;height:500px;background-color:yellow;"></div>
</body>
</html>

Ответы [ 2 ]

3 голосов
/ 01 августа 2011

Вы можете загрузить изображение в виде строки base64 для .src вашего img экземпляра.Копирование img.src в background-image:url скопирует эту строку данных изображения вместо проверки кэша или его загрузки.Например:

<img src = "data:image/gif;base64, SOMEBASE64STRING" />

Вы можете получить версию вашего образа для base64 здесь , сгенерировать ее с помощью PHP, например здесь , или работать с элементом canvasдля генерации строки base64 из изображения, как объяснено здесь .

0 голосов
/ 01 августа 2011

Рассматривали ли вы в первую очередь загрузку изображения с помощью CSS?


редактировать

Я думаю, что вы не сможете обойти это "чистым" способом. Подумайте, как мы собираемся сделать веб-браузер. Вы делаете запрос, сохраняете изображение где-то и используете его. То, что находится на экране, - это просто отрендеренная версия файла, который вы сохранили. Как только вы очистите кеш, браузер должен запросить его снова, если он не сохранит его где-либо, например, в папке tmp или в другом месте (где пользователь не может удалить).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...