URL yerine IFRAME kaynağı olarak html kodu


123

Bir IFRAME için bu standart kod, src URL'sini Yalnızca html koduyla değiştirmenin bir yolu var mı? bu yüzden benim sorunum basit, MYSQL'den bir HTML gövdesi yükleyen bir sayfam var. Bu kodu bir çerçevede sunmak istiyorum, böylece onu sayfanın geri kalanından bağımsız ve bu belirli sınırlamanın sınırları içinde kılar.

<iframe src="http://example.com" name="test" height="120" width="600">You need a Frames Capable browser to view this content.</iframe>   

Yanıtlar:


150

Bunu bir veri URL'si ile yapabilirsiniz. Bu, tek bir HTML dizesindeki tüm belgeyi içerir. Örneğin, aşağıdaki HTML:

<html><body>foo</body></html>

şu şekilde kodlanabilir:

data:text/html;charset=utf-8,%3Chtml%3E%3Cbody%3Efoo%3C/body%3E%3C/html%3E

ve sonra srciframe'in özniteliği olarak ayarlayın . Örnek .


Düzenleme: Diğer alternatif, bunu Javascript ile yapmaktır. Bu neredeyse kesinlikle seçeceğim teknik. Tarayıcının ne kadar süreyle bir veri URL'sini kabul edeceğini garanti edemezsiniz. Javascript tekniği şuna benzer:

var iframe = document.getElementById('foo'),
    iframedoc = iframe.contentDocument || iframe.contentWindow.document;

iframedoc.body.innerHTML = 'Hello world';

Misal


Düzenleme 2 (Aralık 2017) : Html5'in srcdoc özniteliğini kullanın, tıpkı Saurabh Chandra Patel'in cevabında olduğu gibi, şimdi kabul edilen cevap kim olmalı! IE / Edge'i verimli bir şekilde tespit edebiliyorsanız , srcdoc-polyfill kitaplığını yalnızca onlar için ve tüm IE / Edge olmayan tarayıcılarda "saf" srcdoc niteliğini kullanmak için bir ipucu ( emin olmak için caniuse.com'u kontrol edin ).

<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>

5
İnternet gezgini desteği? Veri URI'si
IE8'de

1
Burada çapraz kaynak başlıkları sağlamanın bir yolu var mı? Chrome şikayet etmeye devam ediyor Blocked a frame with origin "http://localhost" from accessing a cross-origin frame.
jozxyqk

1
@AndrewSwan Tek alıntılarla sorunu tam olarak anlamıyorum. Bana bir örnek verebilirmisin?
Septagram

5
HTML'yi php ile bu şekilde kodlamayı arayan benim gibi biri için rawurlencode ( php.net/manual/en/function.rawurlencode.php )
Braiba

4
Eğer kullanırsanız unutmayın innerHTMLtarayıcıyı soyundan komut dosyası etiketleri çalıştırmaz. Daha fazla bilgi için Element.innerHTML MDN sayfasının Güvenlik konuları bölümünü kontrol edin .
Leonid Vasilev

92

kullanmak html5'in yeni özellik srcdoc(srcdoc-polyfill) Dokümanlar

<iframe srcdoc="<html><body>Hello, <b>world</b>.</body></html>"></iframe>

Tarayıcı desteği - Aşağıdaki tarayıcılarda test edilmiştir:

Microsoft Internet Explorer
6, 7, 8, 9, 10, 11
Microsoft Edge
13, 14
Safari
4, 5.0, 5.1 ,6, 6.2, 7.1, 8, 9.1, 10
Google Chrome
14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24.0.1312.5 (beta), 25.0.1364.5 (dev), 55
Opera
11.1, 11.5, 11.6, 12.10, 12.11 (beta) , 42
Mozilla FireFox
3.0, 3.6, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (beta), 50

1
Teşekkürler ! Modern bir webkit web görünümü için bir çözüme ihtiyacım vardı ve bunu yapmanın açık ara en kolay yolu buydu!
Antoine Bolvy

1
IE'de desteklenmiyor
dostum

1
CanIUse.com, desteğin oldukça zayıf olduğunu söylüyor: caniuse.com/#search=srcdoc
msquitieri

5
@msquitieri Hayır, polyfill'in değil yerel desteğin zayıf olduğunu söylüyor .
Walf

1
Ama bu, tırnak işaretlerini kullanmaya başladığınız anda sona
Agil

21

W3Schools'a göre, HTML 5 bunu yeni bir "srcdoc" özniteliği kullanarak yapmanıza izin verir , ancak tarayıcı desteği çok sınırlı görünmektedir.



2
@UweKeim Polyfill'i önerdiğiniz için teşekkürler. Hafif ve harika çalışıyor.
Kek Adam

1
Caniuse.com'a göre, yalnızca kötü şöhretli Microsoft'un IE ve Edge tarayıcıları (Opera Mini'nin yanı sıra) srcdoc özelliğini desteklemez , bu nedenle "çok sınırlı" DEĞİLDİR. Microsoft kullanıcıları için srcdoc-polyfill'i kullanmanız yeterlidir .
Heitor
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.