#html #image
Вопрос:
Я создаю веб-сайт и хотел бы дать пользователям возможность блокировать загрузку сторонних элементов ( в основном изображений ) на сайт, чтобы снизить скорость загрузки. Я уже использовал ленивую загрузку ненужных изображений, но хотел бы предоставить пользователям возможность вообще никогда не загружать изображения. Что я могу здесь сделать? Я попытался использовать свойство CSS hide, но изображение все еще загружено, но не видно. Есть ли какой-нибудь способ остановить загрузку изображений?
Комментарии:
1. Добавьте CSP (Политику безопасности контента) в конфигурацию вашего веб-сервера и разрешите загружать только те ресурсы, из которых, как вы знаете, они должны загружаться.
2. @Snow — рассмотрите возможность использования атрибута данных для изображений. Установите этот атрибут в URL-адрес для загрузки, если изображение действительно должно быть загружено. Проверьте локальное хранилище, затем используйте js для копирования атрибута данных в атрибут src для изображений, которые должны быть загружены.
3. @ManishJangir Я занимаюсь только фронтальной разработкой
4. @enhzflep Не могли бы вы помочь с примером или веб-сайтом, учебником?
Ответ №1:
Вот пример. Предназначено только для демонстрации способа указания изображения, но не для его фактической загрузки. Вам нужно будет решить, как вы хотите хранить флаг «делать/не загружать» для каждого изображения localStorage
.
Возможно, массив истинных/ложных значений…. (the .Метод forEach фактически предоставляет объект, индекс цикла/коллекции и коллекцию, из которой он получен/объект массива, для которого .Был вызван метод forEach — в этом примере вместо использования
images.forEach(
img => {
Я мог бы это сделать
images.forEach(
(img,index,collection) => {
// use index here as index into array retrieved
// from localStorage.
Пример
<!doctype html>
<html>
<head>
<script>
"use strict";
window.addEventListener('load', onLoaded, false);
function onLoaded(evt)
{
// TODO: Add code to
// get data from localStorage
let images = document.querySelectorAll('img');
images.forEach(
img => {
let shouldLoad = false;
// TODO: Add code to
// check current image against retrieved data
// to see if it should be loaded
// example-code.
// I'm just relying on the image's
// class attribute
if (img.classList.contains('dontLoad') == false)
shouldLoad = true;
if (shouldLoad == true)
img.src = img.dataset.url;
}
);
}
</script>
<style>
img{
border: solid 1px red;
min-width: 32px;
min-height: 32px;
}
<!--
dontLoad is just used to flag images for loading
-->
dontLoad{
}
</style>
</head>
<body>
<img data-url='../gfx07.jpg'/>
<img class='dontLoad' data-url='../heart.png'/>
<img data-url='../carColour.jpg'/>
<img class='dontLoad' data-url='../s13.bmp'/>
</body>
</html>
Ответ №2:
Будет ли что-то подобное работать для вас…
Мне пришлось закомментировать localStorage из-за песочницы, но если вы добавите этот cscript в голову, он должен работать
var enabled = true;
function checkenabled() {
if (enabled) {
//add your code here to load images
}
}
function changeenabled() {
if (enabled) {
//localStorage.setItem('enabled', 'false');
enabled = false;
document.getElementById('button').innerHTML = 'disbaled';
//localStorage.getItem('enabled');
checkenabled();
} else {
//localStorage.setItem('enabled', 'true');
enabled = true;
document.getElementById('button').innerHTML = 'enabled';
//localStorage.getItem('enabled');
checkenabled();
}
}
checkenabled();
<button id='button' onclick='changeenabled();'>enabled</button>