jQuery

2009-06-01 9 views
20

के साथ आईफ़्रेम ऊंचाई नियंत्रित करें I iframe की ऊंचाई को नियंत्रित करने के लिए jQuery का उपयोग कर रहा हूं।jQuery

jQuery("iframe",top.document).contents().height(); 

यह काम करता है जब आईफ्रेम की ऊंचाई बढ़ जाती है। जब ऊंचाई कम हो जाती है तो यह काम नहीं करती है। यह केवल पुराने मूल्य देता है। ये क्यों हो रहा है?

+0

@ जोसे बेसिलियो - हाँ मुझे आईफ्रेम सामग्री की ऊंचाई मिलती है और आईफ्रेम पर सेट होती है। – Saravanan

+0

@porneL - क्या आप समझ सकते हैं कि इफ्रेम की ऑब्जेक्ट या फीचर कैसे ढूंढें? – Saravanan

+0

@ सरवन - कृपया मेरी संपादित पोस्ट पढ़ें। –

उत्तर

4

यह मेरे लिए काम करता है अगर मैं इसे सेट करता हूं और इसे .contents() का उपयोग किए बिना पुनर्प्राप्त करता हूं। कृपया नीचे मेरा उदाहरण देखें।

function changeFrameHeight(newHeight){ 
    jQuery("iframe",top.document).height(newHeight); 
    alert("iframe height=" + jQuery("iframe",top.document).height()); 
} 

संपादित करें: अगर मैं सही ढंग से समझ, तुम वेतन वृद्धि को फोन करके स्क्रॉल बार से छुटकारा पाने और घटती फोन करके वापस मूल ऊंचाई पर जाने के लिए कोशिश कर रहे हैं।

विभिन्न ब्राउज़रों में कई परीक्षण करने के बाद। यहां कोड है जो एफएफ, आईई, क्रोम, सफारी और ओपेरा में काम करता है।

heightIncrement:function(){ 
var heightDiv = jQuery("iframe",top.document).contents().find('body').attr('scrollHeight'); 
jQuery("iframe",top.document).css({height:heightDiv}); 
} 

अपने heightDecrement समारोह बदलें निम्न का उपयोग कर रहे हैं::

heightDecrement:function(){ 
jQuery("iframe",top.document).css({height:originalHeight}); 
} 
1

लोडिंग के समय मैं फोन पर

//first declare a variable to store the original IFrame height. 
var originalHeight = $("iframe",top.document).height(); 
अपने heightIncrement समारोह निम्नलिखित का उपयोग करने के लिए परिवर्तित करें

यह फ़ंक्शन

heightIncrement:function(){  
      if($.browser.mozilla) 
      { 
      var heightDiv = jQuery("iframe",top.document).contents().attr("height")+"px";      
      jQuery("iframe",top.document).css({height:heightDiv}); 
      } 
      else if($.browser.opera || $.browser.safari || $.browser.msie) 
      {    
      var heightDiv = jQuery("iframe",top.document).height();     
      jQuery("iframe",top.document).css({height:heightDiv}); 
      } 
} 

यदि मैं सामग्री के बिना उपयोग करता हूं() यह शून्य लौटाता है।

+0

आपको ब्राउज़र पहचान के बजाए ऑब्जेक्ट/फीचर डिटेक्शन का उपयोग करना चाहिए, उदा। दोनों विधियों का उपयोग करके ऊंचाई पढ़ें और देखें कि कौन सा अच्छा परिणाम देता है। – Kornel

+0

@ सरवन - ऐसा लगता है कि आप ऊंचाई को पुनः प्राप्त करने की कोशिश कर रहे हैं और फिर एक ही चीज़ पर फिर से सेट कर रहे हैं। क्या वो सही है? –

+0

आज के JQuery में $ (का उपयोग करते हुए ".. बजाय jQuery (के" .. काम करेंगे। – nottinhill

30

मैं निम्नलिखित का उपयोग करें और यह पूरी तरह से काम करता है ...

$("#frameId").height($("#frameId").contents().find("html").height()); 
निश्चित रूप से

बस जब यह (कोई "autoresize") कहा जाता है ... लेकिन यह कम हो रही के रूप में बढ़ रही है काम करता है

+0

धन्यवाद! यह प्रयोग किया और अच्छा काम करता है। – ppumkin

+2

इस काम क्रॉस डोमेन? – Jacques

+5

मुझे नहीं लगता कि इस ** क्रॉस डोमेन के साथ काम करेंगे **।अगर आपके पास इसका समाधान है तो कृपया मदद करें। –

3

यह प्राचीन है लेकिन उम्मीद है कि यह मदद करता है।

क्रोम (या शायद सभी वेबकिट, सुनिश्चित नहीं) की तरह लगता है कि स्क्रॉल हाइट बढ़ सकता है लेकिन कम नहीं हो सकता है (कम से कम एक आईफ्रेम में सामग्री के मामले में)। तो यदि सामग्री बढ़ती है, तो shrinks, scrollOffset उच्च स्तर पर रहता है। यह बहुत अच्छा नहीं है जब आप आईफ्रेम की ऊंचाई को हमेशा बदलने वाली सामग्री के लिए काफी बड़ा बनाने का प्रयास कर रहे हैं।

एक हैक वर्कअराउंड ऊंचाई को फिर से निर्धारित करने के लिए ऊंचाई को पुन: गणना करने के लिए है, ताकि आईफ्रेम की ऊंचाई इसकी सामग्री से छोटी हो सके, तो scrollHeight रीसेट हो गया है।

var frame = top.document.getElementById('iFrameParentContainer').getElementsByTagName('iframe')[0]; 
var body = frame.contentWindow.document.body; 
var height = body.scrollHeight; // possibly incorrect 
body.height = "1px"; 
height = body.scrollHeight; // correct 

यह मामूली झिलमिलाहट का कारण बन सकता है लेकिन आमतौर पर, यह मेरी मशीन (टीएम) पर काम नहीं करता है।

+1

मैं ऊंचाई को 1px पर सेट करने में समस्याओं के लिए भाग गया - कभी-कभी, पुनर्मूल्यांकन बंद हो जाएगा। मैंने [इस जवाब] में सुझाए गए 'ऑटो' की कोशिश की (http://stackoverflow.com/a/11864824/385996) और ऐसा लगता है कि यह अधिक मामलों में काम करता है। लेकिन कुल मिलाकर यह क्रोम के साथ बग (?) के आसपास जाने का एक शानदार तरीका प्रतीत होता है। –

0

मैंने लोड होने पर आईफ्रेम की ऊंचाई और चौड़ाई का सफलतापूर्वक आकार बदल दिया है।आइफ्रेम स्रोत अपनी मूल से भिन्न डोमेन है तो आप शायद easyXDM का उपयोग करने की आवश्यकता होगी http://www.the-di-lab.com/?p=280

 

$(".colorbox").colorbox(

{iframe:true, 

innerWidth:0, 

innerHeight:0, 

scrolling:false, 

onComplete:function(){ 

$.colorbox.resize(

{ 

innerHeight:($('iframe').offset().top + $('iframe').height()), 

innerWidth:($('iframe').offset().left + $('iframe').width()) 

} 

); 

} 

} 

); 

0

,: मूल रूप से आप इस नीचे के रूप में कर सकते हैं, और मैं भी अपने ब्लॉग पर एक छोटा सा लेख पोस्ट करते हैं।

0

मैं इस का उपयोग करें:।

$ ('# आइफ्रेम') रहते हैं ('MouseMove', समारोह (घटना) {

वर theFrame = $ (यह parent.document.body) ;

यह .height ($ (document.body) .height() - 350);
});

+0

'mousemove' अप्रभावी होगा क्योंकि यह अक्सर ट्रिगर होता है? –

0

मुझे यकीन नहीं है कि लोग अपनी विधियों से संतुष्ट हैं लेकिन मैंने एक बहुत ही सरल दृष्टिकोण लिखा है जो सफारी, क्रोम, आईई 9, ओपेरा और नवीनतम में मेरे लिए काफी अच्छा काम करता है। फ़ायरफ़ॉक्स।

मुझे एक Google कैलेंडर फेड आईफ्रेम का आकार बदलने में समस्या आई है, इसलिए मैंने आईफ़्रेम की शैली में इसे डिफ़ॉल्ट आकार दिया है: चौड़ाई = "600" और मूल रूप से अधिकतम की ऊंचाई सेटिंग जो मैं चाहता हूं, 980 मुझे विश्वास है, तो लिपटे क्रमशः 400px और 300px पर 100% पर ऊंचाई और चौड़ाई और न्यूनतम-ऊंचाई न्यूनतम-चौड़ाई के साथ एक कंटेनर डिव में है कि, और फिर कुछ jQuery पर ऑनलोड और onresize चलाने के लिए जोड़ा ...

 <script> 

     var resizeHandle = function(){ 
      var caseHeight = $('#calendarCase').height(); 
      var caseWidth = $('#calendarCase').width(); 
      var iframeWidth = $('#googleCalendar').width(caseWidth - 10); 
      var iframeHeight = $('#googleCalendar').height(caseWidth - 10);; 
     }; 


</script> 


<body id ="home" onLoad="resizeHandle()" onResize="resizeHandle()"> 

तो स्पष्ट करने के लिए, आकार परिवर्तन समारोह ऑनलोड चलाता है क्योंकि मैं अपने उत्तरदायी डिजाइन है, जो ऊंचाई calendarCase div की चौड़ाई लेता है और ऊंचाई और iframe (#googleCalendar) तदनुसार की चौड़ाई सेट में मोबाइल फोन और टेबलेट लक्ष्यीकरण कर रहा हूँ, शून्य से 10 pixes कुछ पैडिंग

संपादित करें मैं यह उल्लेख करना भूल गया कि मैंने अनुपात का उपयोग किया है ताकि अनुपात को बाधाओं और कहीं भी वर्ग को बनाए रखने के लिए iFrame की ऊंचाई निर्धारित किया जा सके।

यह ठीक काम किया है अब तक, अगर कोई किसी भी विचार क्यों यह स्थिर कृपया सलाह नहीं हो सकता है,

चियर्स

1

यह एक सरल jQuery कि मेरे लिए काम किया है। iexplorer, फायरफॉक्स और Crome में परीक्षण किया गया:

$('#my_frame').load(function() { 
     $(this).height($(this).contents().find("html").height()+20); 
}); 

मैं 20 पिक्सल जोड़ने के बस किसी भी स्क्रॉल पट्टी से बचने के लिए, लेकिन आप एक लोअर बाउंड कोशिश कर सकते हैं।