Mam obraz, który później dynamicznie zapełniam src javascript, ale dla ułatwienia chcę, aby tag obrazu istniał przy ładowaniu strony, ale po prostu niczego nie wyświetlał. Wiem, że <img src='' />
jest nieprawidłowa, więc jaki jest najlepszy sposób na to?
html
validation
jhchen
źródło
źródło
Odpowiedzi:
Choć nie ma poprawny sposób pominąć źródło fotografowanego obrazu, tam są źródła, które nie spowoduje hitów serwerów. Niedawno miałem podobny problem ze
iframe
s i zdecydowałem,//:0
że to najlepsza opcja. Nie naprawdę!Rozpoczęcie od
//
(pominięcie protokołu) powoduje użycie protokołu bieżącej strony, co zapobiega ostrzeżeniom o „niebezpiecznej zawartości” na stronach HTTPS. Pominięcie nazwy hosta nie jest konieczne, ale jest krótsze. Wreszcie port:0
gwarantuje, że żądanie serwera nie może zostać wykonane (zgodnie ze specyfikacją nie jest poprawnym portem).To jedyny adres URL, który znalazłem, nie spowodował żadnych trafień na serwer ani komunikatów o błędach w żadnej przeglądarce. Zwykły wybór -
javascript:void(0)
- spowoduje wyświetlenie ostrzeżenia o „niezabezpieczonej zawartości” w IE7, jeśli zostanie użyte na stronie obsługiwanej przez HTTPS. Każdy inny port spowodował próbę połączenia z serwerem, nawet w przypadku nieprawidłowych adresów. (Niektóre przeglądarki po prostu wysyłają nieprawidłowe żądania i czekają, aż upłynie limit czasu).Zostało to przetestowane w Chrome, Safari 5, FF 3.6 i IE 6/7/8, ale spodziewam się, że będzie działać w dowolnej przeglądarce, ponieważ powinna to być warstwa sieciowa, która zabija każdą próbę żądania.
źródło
about:blank
jest prawdopodobnie lepszym rozwiązaniem.onerror
moduł obsługi obrazu .Inną opcją jest osadzenie pustego obrazu. Zrobi to każdy obraz, który odpowiada Twojemu celowi, ale poniższy przykład koduje GIF, który ma tylko 26 bajtów - z http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever
Edytuj na podstawie komentarza poniżej:
Oczywiście należy wziąć pod uwagę wymagania dotyczące obsługi przeglądarki. Nie ma wsparcia dla IE7 lub mniejszej. http://caniuse.com/datauri
źródło
img
elementu, aby pokazać np. Tło i obramowanie, spróbuj,src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="
które są pobierane z przezroczystego gif 1 x 1 x x, zrobiłem I Photoshop przepchnięty przez base64-image.dedata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII=
data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
W dzisiejszych czasach IMHO najlepszy krótki, rozsądny i ważny sposób na pusty img src jest taki:
Drugi przykład wyświetla „Tekst alternatywny” (oraz ikonę zepsutego obrazu w Chrome i IE).
"data:,"
jest prawidłowym identyfikatorem URI. Domyślny typ pustego nośnika totext/plain
. Oznacza to pusty plik tekstowy i jest równoważny z"data:text/plain,"
OT: Wszystkie przeglądarki rozumieją jasno
alt
. Możesz pominąć=""
, jest domyślny dla specyfikacji HTML.źródło
srcset="data:,x"
Polecam dynamiczne dodawanie elementów, a jeśli używasz jQuery lub innej biblioteki JavaScript, jest to dość proste:
również spójrz na
prepend
iappend
. W przeciwnym razie, jeśli masz taki znacznik obrazu i chcesz go zweryfikować, możesz rozważyć użycie fikcyjnego obrazu, takiego jak przezroczysty gif 1 px lub png.źródło
Nie robiłem tego od dłuższego czasu, ale raz musiałem przejść przez to samo.Jest moim ulubionym - ten
//:0
sugeruje, że spróbujesz nawiązać połączenie HTTP / HTTPS z serwerem źródłowym na porcie zero (port tcpmux?) - co jest prawdopodobnie nieszkodliwe, ale wolałbym tak nie robić. Heck, przeglądarka może zobaczyć port zero i nawet nie wysłać żądania. Ale nadal wolałbym, aby nie było tak określone, gdy prawdopodobnie nie to masz na myśli.W każdym razie renderowanieabout:blank
jest bardzo szybkie we wszystkich testowanych przeglądarkach. Właśnie wrzuciłem go do walidatora W3C i nie narzekał, więc może nawet być ważny.Edycja : Nie rób tego; nie działa we wszystkich przeglądarkach (pokaże ikonę „uszkodzony obraz”, jak wskazano w komentarzach do tej odpowiedzi). Skorzystaj z
<img src='data:...
poniższego rozwiązania. Lub jeśli nie zależy ci na ważności, ale nadal chcesz unikać zbędnych żądań do serwera, możesz to zrobić<img alt="" />
bez atrybutu src. Ale to NIEPRAWIDŁOWY HTML, więc wybieraj to ostrożnie.Strona testowa pokazująca całą masę różnych metod: http://desk.nu/blank_image.php - obsługiwana z różnego rodzaju różnymi typami dokumentów i typami treści.- jak wspomniano w komentarzach poniżej, skorzystaj z nowej strony testowej Marka Ormstona pod adresem : http://memso.com/Test/BlankImage.htmlźródło
<img />
- tag graficzny bez atrybutu src. To nie jest poprawne (więc nie ma sensu umieszczanie tam pustego znacznika alt). Nadal gram z nim i odpowiednio zaktualizuję swoją odpowiedź (lub przekreślę ją).Jak napisano w komentarzach, ta metoda jest zła.
Nie znalazłem tej odpowiedzi wcześniej, ale zgodnie ze specyfikacją W3 prawidłowy pustysrc
tag byłby linkiem zakotwiczonym#
.Przykład:src="#"
,src="#empty"
Strona pomyślnie się sprawdza i nie są wysyłane żadne dodatkowe żądania.źródło
Odkryłem, że po prostu ustawienie src na pusty ciąg i dodanie reguły do CSS, aby ukryć ikonę uszkodzonego obrazu, działa dobrze.
źródło
''
, nie może być niezdefiniowany.jeśli utrzymasz pusty atrybut src, przeglądarka wyśle żądanie do bieżącego adresu URL strony zawsze dodawaj 1 * 1 przezroczysty obraz w atrybucie src, jeśli nie chcesz żadnego adresu URL
źródło
data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
zadziałałZnalazłem to używając:
nie złoży żądania i nie potwierdzi poprawnie.
Przeglądarki po prostu zablokują dostęp do lokalnego systemu plików.
Ale na przykład w dzienniku konsoli Chrome może pojawić się błąd:
źródło
Użyj naprawdę pustego, ważnego i wysoce zgodnego pliku SVG na podstawie tego artykułu :
src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E"
Będzie miał domyślny rozmiar do 300 x 150 pikseli, jak każdy inny plik SVG, ale możesz pracować z tym w
img
domyślnych stylach elementu, tak jak byś potrzebował w każdym przypadku w praktycznej implementacji.źródło
visibility: hidden
jest trochę bardziej odpowiedni niżopacity: 0
dla selektorów atrybutów, które sugerujesz.Opierając się na odpowiedzi Bena Blota, jedynym sposobem, w jaki udało mi się to sprawdzić w walidatorze w3, było:
źródło
alt
atrybutem.Ja osobiście używam
about:blank
src
ikony zepsutego obrazu i zajmuję się tym, ustawiając krycieimg
elementu na0
.źródło
Gdzie invis.gif jest jednopikselowym przezroczystym gifem. Nie złamie się to w przyszłych wersjach przeglądarek i działa w starszych przeglądarkach od lat 90.
png też powinien działać, ale w moich testach gif miał 43 bajty, a png 167 bajtów, więc gif wygrał.
ps nie zapomnij o znaczniku alt, podobnie jak walidatory.
źródło
Po prostu:
źródło