2009-08-20 21 views
27

iframe'in içine yüklenen bir sayfanın kaldırılması var mı? Iframe src'yi mümkünse boş bir sayfaya değiştirmek istemiyorum. Temel olarak, daha önce yüklenen sayfayı temizlemiyor gibi görünmesi dışında, bu $('#frameID').attr("src",""); gibi bir şey yapacak bir şey arıyorum.Bir iFrame'den içeriğin boşaltılması/kaldırılması

İçinde herhangi bir içerik yüklü olmayacak şekilde iframe sıfırlayacak olan çağıran bir "unload" işlevi var mı?

+4

Sadece yeni bir iframe kaldırabilirsiniz. –

+5

'$ (" # frameID ") attr (" src "," ")' Firefox 11'de benim için gayet iyi çalışıyor. Eğer gerçekten boş bir iframe istiyorsan, 'src' yi ayarlamayı da deneyebilirsiniz. hakkında: boş bir dize yerine boş '. –

+0

@IlmariKaronen hakkında: blank 'harikalar çalışıyor! – TheVillageIdiot

cevap

24

Diğer çözümler, her zaman XHTML'de çalışmayacak olan innerHTML kullanın. Ayrıca sadece document.body'u temizlerler (<head>'da hala bir şey var).

var frame = document.getElementById("myFrame"), 
frameDoc = frame.contentDocument || frame.contentWindow.document; 
frameDoc.documentElement.innerHTML = ""; 
+1

Teşekkürler bu gerçekten – Dan

+1

İyi Çözüm kullanarak sona erdi, gerçekten takdir !! –

+2

[AJ Ostergaard] (http://stackoverflow.com/users/63306/aj-ostergaard) bir [öneriyi düzenle] 'de belirtildiği gibi (http://stackoverflow.com/suggested-edits/227353), bu yalnızca iframe ana sayfa ile aynı etki alanındaysa, çalışın. Düzenlemenin yanlış yapıldığını reddettim, ancak konusu hala doğru ve bahsetmeye değer. –

4

$ ('# frameID'). ContentWindow.document.body.innerHTML = '';

Herhangi bir iframede olduğu gibi, bu yalnızca aynı etki alanındaysanız çalışır.

+1

, 'ıncontentWindow'unu yapabilir misiniz? – geowa4

1

Birincisi, çerçevenin belgeyi almak: Sonra

var frame = $('#frameId').get(0); 
var frameDoc = frame.contentDocument || frame.contentWindow.document; 

, boş o:

Bu çok çalışması gerektiğini düşünüyorum
frameDoc.getElementsByTagName('body')[0].innerHTML = ""; 

:

$('body', frameDoc).html(""); 

Şimdi, belki Kafanıza yüklenebilecek herhangi bir betik ile bir şeyler yapmak istiyorum, ama bu başlamanız gerekir.

2
$("#frameId").contents().find("div#SomeDIVinsideFrame").remove(); // removes some div content inside iframe 

$("#FrameId").remove(); // removes frame 

Sen unload olayını tetikleyebilir http://www.livepage.info

1

üzerinde iç çerçeve haberleri göstermek için aynı sorun vardı:

var frame = document.getElementById("myFrame"), 
frameDoc = frame.contentDocument || frame.contentWindow.document; 
frameDoc.removeChild(frameDoc.documentElement); 

Bu çözüm innerHTML kullanır: Burada DOM kullanan bir çözümdür iframe

$('body').trigger('unload'); 
gibi.

ve sonra üst pencereden iframe kaldırın ve gerektiğinde yeni src ile yeni bir iframe yeniden yükleyin.

$('#iframe_wrapper').html(''); 
$('#iframe_wrapper').html('<iframe src="...">'); 
0
function getContentFromIframe(iFrameName) 
{ 

var myIFrame = document.getElementById(iFrameName); 
var content = myIFrame.contentWindow.document.body.innerHTML; 

//Do whatever you need with the content  

} 

kesinlikle !!!!!!!!!!!!!!!! çalışacak

7

bu deneyin,

$("iframe").contents().find("body").html(''); 

Sadece içeride Etiketinizle innerHTML temizler ve tüm tarayıcılarda ve oldukça basit ve bunun çalışma yeniden olmadan iframe yeniden böylece aslında iframe boşaltmadın !!

+3

dan işe yaramazsa, ancak bu yalnızca iframe aynı etki alanından yüklenmişse çalışır, değil mi? – Robert

+0

evet, farklı etki alanıyla çalışamazsınız !!! –

2

iframe'in çıkarılması ve yeniden oluşturulması, burada en akıllı çözümdür (diğer cevaplara karşı herhangi bir saldırı yoktur).Sadece saklanan değişkenleri floş yok iframe innerHTML,

Buna dikkat et ciltli Olay Dinleyicilerine vb bellek sızıntıları, birden tetikleyiciler gibi sorunlar (bir sürü neden olabilir kaldırarak

aynı olay vb.

0

Bu benim için çalıştı, iframe etiketi içindeki her şeyi temizledi; vücut, kafa, html ve tüm:

$("iframe").contents().empty(); 
4

dinamik iframe'iniz, bir yazma diğerine sızacaktır yüklenen tüm komut dosyaları/değişkenin içeriğini oluşturmak edin. Böylece, dom elemanının temizlenmesiyle @Eli tarafından sağlanan çözüm,'da çalışmaz. Kısacası

:

bir div öğesi haline iframe sarın ve dom içeriği değiştirmek, temizlemek için.

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>JS Bin</title> 
</head> 
<body> 
    <div id="wrapper"> 
    <iframe id="test"></iframe> 
    </div> 
</body> 
</html> 

temizlemek için: Ayrıntılar

var wrapper = document.getElementById('wrapper'); 
wrapper.innerHTML= "<iframe id='test'></iframe>"; 

:

var iframe = document.getElementById('test'); 

// define variable 'a' 
var content = "<html><body><script>var a=555;</script></body></html>"; 

iframe.contentWindow.document.open(); 
iframe.contentWindow.document.write(content); 
iframe.contentWindow.document.close(); 

// uncomment this to clean the iframe 
//document.getElementById('wrapper').innerHTML= "<iframe id='test'></iframe>"; 

// write 'a' if defined 
var content2 = "<html><body><div id='content'></div><script>document.getElementById('content').innerHTML=typeof a === 'undefined' ? 'undefined' : a;</script></body></html>"; 

var iframe2 = document.getElementById('test'); 
iframe2.contentWindow.document.open(); 
iframe2.contentWindow.document.write(content2); 
iframe2.contentWindow.document.close(); 
: İki iç çerçeve arasında kodlama sızıntı Örnek (Chrome ile test edilmiştir) yazar

komut sızıntı Deneme

Bu kodu çalıştırırsanız, İkinci iframe, ilk iframe'de tanımlanmış olmasına rağmen 555.

Orta kısımdan rahatsızlık duyarsanız, beklendiği gibi çalışır.

İlgili soru: Avoiding memory leaks loading content into an iframe

1
var frame = document.getElementById("myframe"); 
frame.src = "about:blank"; 

Bu benden çalıştı ve engelledi bellek sızıntıları da. Benim durumumda da ebeveyni yok etmek zorunda kaldım. Bu durumda, bellek sızıntısını önlemek için ana gecikmeyi yok etmeniz gerekiyor

+0

"Ebeveyn" ile, üst sayfadaki IFRAME etiketini içeren ana sayfa veya DOM üst öğeyi mi kastediyorsunuz? – donohoe

+0

iframe içeren ana öğe – Antonis

İlgili konular