iFrame

2009-08-20 13 views
27

से सामग्री को उतारना/निकालना क्या कोई आईफ्रेम के अंदर लोड किए गए पृष्ठ को उतारने के लिए वैसे भी है? यदि संभव हो तो मैं iframe src को रिक्त पृष्ठ में बदलना नहीं चाहता हूं। मैं मूल रूप से ऐसा कुछ ढूंढ रहा हूं जो इस $('#frameID').attr("src",""); जैसा कुछ करेगा, सिवाय इसके कि कोड पहले लोड किए गए पृष्ठ को साफ़ नहीं करता है।iFrame

क्या कोई "unload" फ़ंक्शन है जिसे मैं कॉल कर सकता हूं जो iframe को रीसेट करेगा ताकि इसमें कोई सामग्री लोड न हो?

+4

को रोकने के लिए कुछ देरी के साथ माता-पिता को नष्ट करना होगा, आप केवल एक नया आईफ्रेम हटा सकते हैं और बना सकते हैं। –

+5

'$ (" # frameID ")। Attr (" src "," ") 'फ़ायरफ़ॉक्स 11 पर मेरे लिए ठीक काम करता है। यदि आप वास्तव में एक खाली आईफ्रेम चाहते हैं, तो आप' src' को ' रिक्त स्ट्रिंग के बजाय रिक्त '। –

+0

@IlmariKaronen 'के बारे में: खाली' अद्भुत काम करता है !!! – TheVillageIdiot

उत्तर

24

अन्य समाधान innerHTML का उपयोग करते हैं, जो हमेशा एक्सएचटीएमएल में काम नहीं करेगा। वे केवल document.body को साफ़ करते हैं (<head> में कुछ भी मौजूद है)।

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

यह समाधान innerHTML का उपयोग करता है:

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

धन्यवाद मैं इस – Dan

+1

अच्छा समाधान का उपयोग कर समाप्त हुआ, वास्तव में सराहना की !! –

+2

[एजे ओस्टरगार्ड] के रूप में (http://stackoverflow.com/users/63306/aj-ostergaard) ने एक [संपादन सुझाव] (http://stackoverflow.com/suggested-edits/227353) में बताया, यह केवल तभी हो सकता है अगर आईफ्रेम मुख्य पृष्ठ के समान डोमेन पर है तो काम करें। मैंने गलत जगह के लिए संपादन को खारिज कर दिया, लेकिन उसका मुद्दा अभी भी सही और उल्लेखनीय है। –

4

$ ('# फ्रेमआईडी')। ContentWindow.document.body.innerHTML = '';

किसी भी आईफ्रेम के साथ, यह केवल तभी काम करता है जब आप एक ही डोमेन पर हों।

+1

क्या आप '.contentWindow' कर सकते हैं? – geowa4

1

पहले, फ्रेम के दस्तावेज़:

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

फिर, खाली यह:

frameDoc.getElementsByTagName('body')[0].innerHTML = ""; 

मुझे लगता है कि यह भी काम करना चाहिए: अब

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

, आप हो सकता है किसी भी स्क्रिप्ट के साथ कुछ करना चाहते हैं जो सिर में लोड हो सकता है, लेकिन यह आपको शुरू करना चाहिए।

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

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

आइफ्रेम खबर http://www.livepage.info

1

पर आप की अनलोड घटना ट्रिगर कर सकते हैं दिखाने के लिए एक ही समस्या थी यहाँ एक समाधान डोम का उपयोग करता है कि iframe

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

और फिर पैरेंट विंडो से आईफ़्रेम हटा दें और आवश्यक होने पर नए स्रोत के साथ एक नया आईफ्रेम पुनः लोड करें।

$('#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  

} 

यह निश्चित रूप से काम करेंगे !!!!!!!!!!!!!!!!

7

इस प्रयास करें,

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

यह केवल अंदर अपनी टैग के innerHTML को साफ करता है और वास्तव में अपने आइफ्रेम उतारना नहीं, तो आप इसे और इसके काम कर रहे सभी ब्राउज़रों में और काफी सरल पुन: लोड के बिना अपने आइफ्रेम का पुन: उपयोग कर सकते हैं !!

+3

से आपका आईफ्रेम काम नहीं करता है, लेकिन यह केवल तभी काम करता है यदि iframe उसी डोमेन से लोड हो, है ना? – Robert

+0

हाँ, आप विभिन्न डोमेन के साथ काम नहीं कर सकते !!! –

2

आईफ्रेम को हटाने और पुनर्निर्माण करना सबसे स्मार्ट समाधान है (अन्य उत्तरों की ओर कोई अपराध नहीं)।

को हटाने केवल आइफ्रेम आप चर फ्लश नहीं है की innerHTML संग्रहीत, बाध्य eventListeners आदि

इस के साथ सावधान रहें, यह समस्या (स्मृति लीक, के कई चलाता की तरह का एक बहुत कारण हो सकता तक एक ही घटना आदि)।

0

यह मेरे लिए काम करता है, आईफ्रेम टैग के भीतर सबकुछ साफ़ कर देता है; शरीर, सिर, एचटीएमएल और सभी:

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

आप गतिशील रूप से अपने iframe, सभी लिपियों/चर लोड एक लिखने से दूसरे में रिसाव की सामग्री उत्पन्न हैं। इस प्रकार डोम तत्व को साफ़ करने के @Eli द्वारा प्रदान किया गया समाधान काम नहीं करेगा।

संक्षेप में:

, साफ करने के लिए एक div तत्व में अपने आइफ्रेम लपेट और उसके डोम सामग्री बदलें।

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

साफ करने के लिए:

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(); 
: स्क्रिप्ट रिसाव

दो iframe के बीच स्क्रिप्ट रिसाव का उदाहरण (क्रोम के साथ परीक्षण) लिखते हैं डेमो

यदि आप यह कोड चलाते हैं, तो आप का आउटपुट देखेंगे दूसरा आईफ्रेम 555 है हालांकि इसे पहले आईफ्रेम में परिभाषित किया गया है।

यदि आप मध्य भाग को अपूर्ण करते हैं तो यह अपेक्षित कार्य करेगा।

संबंधित प्रश्न: Avoiding memory leaks loading content into an iframe

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

यह मैं से रोका मेमोरी लीक भी काम किया है और। मेरे मामले में मुझे माता-पिता को भी नष्ट करना पड़ा। उस स्थिति में आपको स्मृति रिसाव

+0

'पैरेंट' द्वारा क्या आपका मतलब माता-पिता पृष्ठ या डोम में मूल तत्व है जिसमें IFRAME टैग है? – donohoe

+0

मूल तत्व जिसमें आईफ़्रेम शामिल है – Antonis

 संबंधित मुद्दे