Src içermeyen bir resim eklemenin geçerli yolu nedir?


234

Dinamik olarak bir src ile daha sonra javascript ile dolduracak bir görüntü var ama kolaylığı için görüntü etiketi sayfa yükü var ama sadece bir şey görüntülemek değil istiyorum. <img src='' />Geçersiz olduğunu biliyorum , bu yüzden bunu yapmanın en iyi yolu nedir?


4
Bu nispeten eski bir sorudur, ancak src içermeyen bir görüntünün aslında anlamsız olduğunu ve spesifikasyonun görüntünün ilk başta gömülü bir kaynağa işaret eden bir src'ye sahip olması gerektiğini söylemesi önemlidir . Geçerlilik ve / veya anlambilim üzerine düşünüyorsanız, HTML, daha sonra verilerle doldurulacak bir yer tutucu resim belirtmek için bir yol sağlamadığından, görüntüyü tamamen atlayıp gerçeğin ardından ekleyerek çok daha iyi sunulur.
BoltClock

1
Mika Tuupola'nın tembel yükleme jQuery eklentisini kullanırken, '<img class = "lazy" data-original = "img / example.jpg" width = "640" height = "480">' işaretlemesini kullanır, bu yüzden bir anlamda, bir kaynağı göstermesi gerekir, ancak bunun src özniteliği ile yapılması gerekmez.
iWillGetBetter

Bu => bakın bunun yerine div öğesi kullanabilirsiniz stackoverflow.com/a/5513934/1395101
Amin Ghaderi

Yanıtlar:


237

Bir resmin kaynağını atlamak için hiçbir geçerli yolu olmasa da, orada olan kaynaklar hangi olmaz sunucu isabet neden olur. Geçenlerde iframes ile benzer bir sorun yaşadım ve //:0en iyi seçenek olarak belirledim. Hayır, gerçekten!

//(Protokolün çıkarılması) ile başlamak , geçerli sayfanın protokolünün kullanılmasına neden olarak HTTPS sayfalarındaki "güvensiz içerik" uyarılarını önler. Ana bilgisayar adını atlamak gerekli değildir, ancak kısaltır. Son olarak, bir :0sunucu isteği yapılmamasını sağlar (spesifikasyona göre geçerli bir port değildir).

Bu, herhangi bir tarayıcıda hiçbir sunucu isabetine veya hata mesajına neden olmadığım bulduğum tek URL. javascript:void(0)HTTPS aracılığıyla sunulan bir sayfada kullanılırsa - - seçimi IE7'de "güvenli olmayan içerik" uyarısına neden olur. Başka herhangi bir bağlantı noktası, geçersiz adresler için bile sunucu bağlantısının denenmesine neden oldu. (Bazı tarayıcılar yalnızca geçersiz istekte bulunur ve zaman aşımına uğrar.)

Bu Chrome, Safari 5, FF 3.6 ve IE 6/7/8'de test edildi, ancak herhangi bir deneme isteğini öldüren ağ katmanı olması gerektiği için herhangi bir tarayıcıda çalışmasını beklerim.


16
Bu yanıt, güvenlik duvarınızın örneğin 0 numaralı bağlantı noktasına erişme konusunda sizi uyarmasına neden olabilir. Veya sunucu güvenlik günlüğüne neden olabilir. Yanıt önerisi about:blankmuhtemelen daha iyi bir çözümdür.
Florian Margaine

10
Bu benim için bozuk bir görüntü simgesinin görüntülenmesine neden oluyor. Bunu gören başka biri var mı? En son Firefox'u (27) kullanıyorum.
dmikester1

10
Bu da w3c doğrulayıcı başarısız olur: img öğesindeki src özniteliği için hatalı değer //: 0: Geçersiz ana makine: boş ana bilgisayar.
ysrb

Bu çalışmıyor: Takas adı verilen bir resim galerisi eklentisi içeren bir ASP.NET MVC 4 uygulaması var. Eklenti, görüntüleri dinamik olarak oluşturur ve görüntü alınana kadar //: 0 değerini src'ye koyar. Bu, ev denetleyicimin dizin eylemini iki kez çağırmaktı. Bu yüzden sakının.
jpgrassi

2
Firefox 38'de bu yaklaşım görüntünün onerrorişleyicisini tetikler .
Nate Whittaker

221

Başka bir seçenek de boş bir görüntü yerleştirmektir. Amacınıza uygun herhangi bir resim olur, ancak aşağıdaki örnek yalnızca 26 baytlık bir GIF kodlar - http://probablyprogramming.com/2009/03/15/the-tiniest-gif-ever

<img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" width="0" height="0" alt="" />

Aşağıdaki yoruma göre düzenleyin:

Tabii ki, tarayıcı desteği gereksinimlerinizi göz önünde bulundurmalısınız. IE7 veya daha azı için destek yok. http://caniuse.com/datauri


14
İyi fikir! Ancak Benim için bu görüntü elemanını öldürür - Herkes diğer yönlerini ihtiyacı varsa img, örneğin arka plan ve sınır göstermek için element, denemek src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="ben Photoshop yapılmış bir 1px x 1px şeffaf gif alınır itti base64-image.de
user56reinstatemonica8

4
Veri URI'leri ile kaynaklarınızı satır içine almak hakkında iki kez düşünmek isteyebilirsiniz: mobify.com/blog/data-uris-are-slow-on-mobile
shawnjan

1
Bu seçeneğin uygulanabilirliği hangi tarayıcıları desteklemeniz gerektiğine bağlıdır: caniuse.com/datauri
Jeff Clemens

6
İşte şeffaf bir 1 piksel PNG:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII=
Keavon

2
Şeffaf görüntü url benim için çalıştı -data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
Vikram Rao

34

Bugünlerde IMHO boş bir img src için en iyi kısa, aklı başında ve geçerli bir yol şöyledir:

<img src="data:," alt>
or
<img src="data:," alt="Alternative Text">

İkinci örnekte "Alternatif Metin" (ayrıca Chrome ve IE'de bozuk resim simgesi) gösterilmektedir.

"data:,"geçerli bir URI. Boş bir ortam türü varsayılan olarak text/plain. Böylece boş bir metin dosyasını temsil eder ve"data:text/plain,"


OT: Tüm tarayıcılar anlaşılır alt. =""HTML özelliklerine göre örtük olabilir .


1
W3C doğrulayıcı kontrolünde HTML hatası yok. Gereksiz istek yok. How Bunu nasıl yapacağınız geçerli bir yol gibi görünüyor.
Kai Noack

En iyi! Bir şey daha, bir srcset içinde doğrulamasını istiyorsanız, kullanınsrcset="data:,x"
Lucian Davidescu

18

Öğeleri dinamik olarak eklemenizi öneririm ve jQuery veya başka bir JavaScript kitaplığı kullanıyorsanız oldukça basittir:

ayrıca bak prepend ve append. Aksi takdirde, böyle bir resim etiketiniz varsa ve doğrulamasını istiyorsanız, 1 piksel şeffaf gif veya png gibi sahte bir resim kullanmayı düşünebilirsiniz.


7
+1 Bu en iyi cevap. Görüntü kaynağı yine de dinamik olarak ayarlanıyorsa, öğenin tamamı dinamik olarak eklenmelidir. Src ayarlanana kadar görünür olmasını istemiyorsanız, öğenin bundan önce orada olması için iyi bir neden düşünemiyorum.
Andrew Ensley

15

Bunu bir süredir yapmadım, ama aynı şeyi bir kez yapmak zorunda kaldım.

<img src="about:blank" alt="" />

Benim favorim - //:0 bir bağlantı noktası sıfır (tcpmux bağlantı noktası?) Üzerinde kaynak sunucuya HTTP / HTTPS bağlantısı yapmaya çalışacağınız anlamına gelir - ki bu muhtemelen zararsızdır, ama yine de yapmamayı tercih ederim. Heck, tarayıcı bağlantı noktasını sıfır görebilir ve hatta bir istek göndermeyebilir. Ama yine de muhtemelen böyle demek istemediğinizde bu şekilde belirtilmemeyi tercih ederim.

Her neyse, about:blanktest ettiğim tüm tarayıcılarda görüntülenmesi aslında çok hızlı. Sadece W3C doğrulayıcısına attım ve şikayet etmedim, bu yüzden geçerli olabilir.

Düzenleme : Bunu yapma; tüm tarayıcılarda çalışmaz (bu yanıtın yorumlarında belirtildiği gibi bir 'bozuk resim' simgesi gösterilir). <img src='data:...Aşağıdaki çözümü kullanın . Ya da geçerliliği önemsemiyorsanız, ancak yine de sunucunuza gereksiz isteklerden kaçınmak istiyorsanız, <img alt="" />src özelliği olmadan bunu yapabilirsiniz . Ama bu GEÇERSİZ HTML, bu yüzden dikkatlice seçin.

Bir dizi farklı yöntemi gösteren Test Sayfası: http://desk.nu/blank_image.php - her türlü farklı doküman ve içerik türüyle sunulur. - aşağıdaki yorumlarda belirtildiği gibi, Mark Ormston'un yeni test sayfasını şu adresten kullanın: http://memso.com/Test/BlankImage.html


Bu, ağ katmanının hata vermesine izin vermekten daha temiz görünüyor.
Denys Séguret

En azından aptal bir güvenlik duvarının 0 numaralı bağlantı noktasını arama izni istemeyeceğinden eminiz ...
Denys Séguret

1
Bunun Chrome'da (ve muhtemelen diğer tarayıcılarda) 'bozuk resim' simgesini görüntülediğini belirtmek gerekir
user56reinstatemonica8

1
Düşündüğümden daha kötü - html5 doktipi ile bile Safari veya Chrome'da çalışmıyor gibi görünüyor. Bir sayfanın İçerik türü ve Dokümanı uyandıracak bir test sayfası var ve şimdiye kadar benim en sevdiğim: <img />- src özniteliği olmayan bir görüntü etiketi . Bu geçerli değil (bu nedenle boş alt etiketi de buraya koymanın bir anlamı yoktur). Onunla oynamaya devam ediyorum ve cevabımı buna göre güncelleyeceğim (ya da üzerinden geçeceğim).
Uberbrady

2
Test sayfanızı aldım ve güncelledim, böylece resimler düzgün çalışmadığında çok daha açıktır. Eski boş resim, "Her Zaman Çalışır" örneğinin yanı sıra gördüğünüz şeyin kısa bir açıklaması olarak eklenmiştir : memso.com/Test/BlankImage.html Bu, geçerli boş veri gif'in tek yeniden kullanılabilir olduğunu fark etmeme neden oldu eski tarayıcı gif görüntüsü (modern IE7 ve altı için hala gereklidir) dışındaki modern tarayıcılar için seçenek
Mark Ormston

12

Yorumlarda yazıldığı gibi, bu yöntem yanlıştır.

Bu cevabı daha önce bulamadım, ancak W3 Specs geçerli boş srcetikete göre bir çapa bağlantısı olurdu #.

Örnek: src="#",src="#empty"

Sayfa başarıyla doğrulanıyor ve ekstra istek yapılmıyor.


1
Bu yaklaşıma karşı bir tartışma var mı? Tarayıcılar arasında nasıl?
tremby

18
Firefox ve Chrome'un bu yaklaşımı kullanırken ikinci bir istekte bulunduğunu gördüm, bu yüzden tavsiye etmem.
Marius

5
Firefox, Chrome ikinci bir istekte bulunur, JMeter bile img src'yi ayrıştırır, bu da yinelenen sayfa yükleriyle sonuçlanır (maksimum derinliğe ulaşılana kadar)
burna

1
URL'yi gizemli bir şekilde değiştirdiği için sayfayı değiştirmek istiyorsanız FF'de Tarayıcılar geri düğmesine iki kez basmanız gerekir.
Kalaschni

3
Bu çok yanlış. Yorumları okuyanlar - BUNU KULLANMAYIN
Gölge Sihirbazı Sizin İçin

11

Ben sadece src boş bir dizeye ayarlamak ve kırık görüntü simgesi gizlemek için CSS bir kural eklemek iyi çalışıyor bulundu.

[src=''] {
    visibility: hidden;
}

[ng-src = ''] {görünürlük: gizli; } angularjs'de ng-src yönergesi kullanıyorsanız
Ivan Paredes

1
Src değerinin ayarlanmış olması gerektiğini '', undefined olmadığını unutmayın.
Vincent Hoch-Drei

Eğer yanılmıyorsam, hala bir istek yerine getirilecek
Nico

9

src özniteliğini tutarsanız boş tarayıcı, geçerli sayfa URL'sine istek gönderir, herhangi bir url istemiyorsanız src özniteliğine her zaman 1 * 1 şeffaf img ekleyin

src="data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA="

1
Bu, bazı tarayıcılarda siyah bir nokta olarak görüntülenecektir.
tomasz86


1
Bu src data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==yine de çalıştı
Max Yari

9

Bunu kullanarak buldum:

<img src="file://null">

bir istekte bulunmaz ve doğru bir şekilde doğrular.

Tarayıcılar yerel dosya sistemine erişimi engeller.

Ancak Chrome'daki konsol günlüğünde görüntülenen bir hata olabilir, örneğin:

Not allowed to load local resource: file://null/

2
Downvote'u açıklamak ister misiniz? Bu yöntemi sadece tartışma için bir örnek sunmayı önermediğimi unutmayın. Doğru bir şekilde doğrulamak ve ek taleplerde bulunmamak sorudan gelen gereksinimleri karşılar.
tenkod

8

Bu makaleye dayanarak gerçekten boş, geçerli ve son derece uyumlu bir SVG kullanın :

src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E"

Herhangi bir SVG'nin yaptığı gibi varsayılan olarak 300x150px boyutunda olacaktır, ancak imgpratik uygulamada her durumda ihtiyacınız olacağı gibi , öğe varsayılan stillerinizde bununla çalışabilirsiniz .


Cevabınızı güncellediğiniz için teşekkür ederiz, ancak IE9'a kadar uyumlu olmayan svg kullandığınızda, uyumluluğun diğer veri-çözümünden daha kötü olduğunu düşünüyorum. Neyse ki, eski IE'yi desteklemek zorunda kaldım, ancak bazı insanlar için hala geçerli.
funkylaundry

Ancak bu, bu makaledeki ile aynı sorunlara sahip değil mi? dev.mobify.com/blog/data-uris-are-slow-on-mobile . <İmg src = "about: blank"> seçeneği ile css img [src = "about: blank"] {opacity: 0} çözümü en iyisidir. Veya, bu düzey CSS seçicinin eski tarayıcılarda desteklenmemesi durumunda, img etiketine "yükleme" gibi bir sınıf veya başka bir şey vermeniz yeterlidir. Daha da iyisi, sınıfa verin, data-src'yi değiştirmek için JavaScript'i kullanın ve ardından yükte solmasını sağlamak için görüntüye bir yükleme işlevi ayarlayın. Ayrıca, yüklenirken gösterilecek bir döndürücüyü de ayarlayabilirsiniz. Gerçekten profesyonel görünüyor.
Jordan Carter

@JordanCarter Tabii, eğer detaylı performans bir sorunsa. Bir sidenote olarak, önerdiğiniz özellik seçicilerinden visibility: hiddenbiraz daha uygun olduğunu söyleyebilirim opacity: 0.
mystrdat

6

Ben Blank'ın cevabından yola çıkarak, bunu w3 doğrulayıcısında doğrulamanın tek yolu şuydu:

<img src="/./.:0" alt="">`

Doğrular, ancak boş bir altöznitelikle bile Firefox'ta kırık görüntü ile sonuçlanır .
James Wright

4

Kişisel about:blank srcolarak imgöğenin opaklığını ayarlayarak kırık görüntü simgesi ile ilgileniyorum 0.


7
Şimdi bu kirli!
mystrdat

@mystrdat: Neden kirli olduğunu ayrıntılı bir şekilde açıklamak ister misiniz? Kabul edilen cevap, "//: 0" kullanarak bana hala kırık görüntü simgesi artı Firefox'ta hiç bitmeyen garip bir istek verdi. Tek piksel base64 png alternatifi, aynı zamanda çok sayıda oyla, <img> 'yi yer tutucu olarak kullanırken, hem yüksekliği hem de genişliği belirtmeden sorun yaşadı. Gereksiz talepler olmadan ve tüm linterleri ve onayları geçmeden hedefime ulaşmanın en temiz yolu budur.
Miguel

Yukarıdaki tüm çözümler kabul edileni çok aptalca, biraz daha zaman aldığımda yeni bir cevap vereceğim.
mystrdat

@ mystrdat: Bu konuda ne söyleyeceğini öğrenmekten mutluluk duyar mıyım?
funkylaundry

1
@funkylaundry Büyük iddialarda bulunduğum ve kaybolduğum için özür dilerim, cevabımı şimdi gönderdim. Ayrıca daha önce kabul ettiğim diğer Veri URI çözümlerini fark etmediğimi de itiraf ediyorum, ancak benimkinin yine de sözdiziminde daha üstün olduğuna inanıyorum.
mystrdat

4
<img src="invis.gif" />

Burada invis.gif tek pikselli saydam bir giftir. Bu, gelecekteki tarayıcı sürümlerinde bozulmayacak ve 90'lardan beri eski tarayıcılarda çalışmaktadır.

png de çalışmalı ama testlerimde gif 43 bayt ve png 167 bayt oldu, böylece gif kazandı.

ps bir alt etiketi, onlar gibi doğrulayıcılar unutma.


-1

Basitçe, Bunun gibi:

<img id="give_me_src"/>

4
Spesifikasyona göre iyi bir fikir değil : src özelliği mevcut olmalı ve geçerli bir URL içermelidir ...
Michael Litvin

1
Belki de krom çalışır, ancak OLACAK html doğrulama hataları atmak ve bir W3 geçerli html ... değil
EhsanT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.