2009-03-25 17 views
21

मैं HTML iFrame में स्क्रॉलबार उपस्थिति (जावास्क्रिप्ट का उपयोग करके) का पता कैसे लगा सकता हूं?मैं HTML iFrame में स्क्रॉलबार उपस्थिति (जावास्क्रिप्ट का उपयोग करके) का पता कैसे लगा सकता हूं?

मैं पहले से ही की कोशिश की है:

 var vHeight = 0; 
     if (document.all) { 
      if (document.documentElement) { 
      vHeight = document.documentElement.clientHeight; 
      } else { 
      vHeight = document.body.clientHeight 
      } 
    } else { 
     vHeight = window.innerHeight; 
    } 

    if (document.body.offsetHeight > vHeight) { 
     //when theres a scrollbar 
    }else{ 
     //when theres not a scrollbar 
    } 

और मैं भी कोशिश की थी:

  this.scrollLeft=1; 
    if (this.scrollLeft>0) { 
     //when theres a scrollbar 
     this.scrollLeft=0; 
     }else{ 
     //when theres not a scrollbar 
     return false; 
    } 
कोई सफलता के साथ

..

मैं खोज की है जावास्क्रिप्ट objetsडोम इंस्पेक पर टोर, लेकिन कुछ भी नहीं मिला।

जावास्क्रिप्ट में आईफ्रेम में स्क्रॉलबार उपस्थिति का पता लगाना संभव है?


आईफ़्रेम सामग्री एक ही डोमेन से आती है।

अब तक कोई सफलता ..

alt text http://www.upvtp.com.br/file.php/1/help_key.jpg

उत्तर

10

jQuery का उपयोग करते हुए आप दस्तावेज़ ऊंचाई, scrollTop स्थिति और व्यूपोर्ट ऊंचाई है, जो आप इस सवाल का जवाब आप की आवश्यकता हो सकती है तुलना कर सकते हैं।

की तर्ज पर

कुछ:

$(window).scroll(function(){ 
    if(isMyStuffScrolling()){ 
    //There is a scroll bar here! 
    } 
}); 

function isMyStuffScrolling() { 
    var docHeight = $(document).height(); 
    var scroll = $(window).height() + $(window).scrollTop(); 
    return (docHeight == scroll); 
} 
+0

आपके उत्तर के लिए धन्यवाद, लेकिन स्क्रॉलबार को स्थानांतरित करने का प्रयास करते समय आपका कोड केवल तभी परीक्षण करता है। मैं पेज लोड पर इसका परीक्षण करना चाहता हूं। – Bonfocchi

+1

$ .ready (function() {}); –

+2

मुझे खेद है, लेकिन यह एक सही समाधान नहीं है। :(आपका कोड वास्तव में जांचता है, भले ही दस्तावेज़ नीचे स्क्रॉल किया गया हो। यहां एक सबूत है: http://jsfiddle.net/vvdb0292/2/। मुझे लगता है कि बॉबन्स का जवाब सही है। – kaboom

1

मैं यह नहीं लगता कि किया जा सकता है अगर iframe सामग्री जावास्क्रिप्ट सुरक्षा सीमाओं के कारण किसी अन्य डोमेन से आता है।

संपादित करें:। उस मामले में, = 'someframe' और आईडी = 'someframe2' आइफ्रेम कोई नाम देने और उसके बाद की तुलना फ्रेम की तर्ज पर कुछ [ 'someframe'] document.body.offsetWidth साथ document.getElementById ('someframe2')। ऑफसेटविड्थ आपको जवाब देना चाहिए।

+1

आईफ्रेम सामग्री एक ही डोमेन से आती है। – Bonfocchi

37
var root= document.compatMode=='BackCompat'? document.body : document.documentElement; 
var isVerticalScrollbar= root.scrollHeight>root.clientHeight; 
var isHorizontalScrollbar= root.scrollWidth>root.clientWidth; 

यह एक स्क्रॉलबार के लिए एक जरूरत है कि क्या वहाँ का पता लगाता है। Iframes के डिफ़ॉल्ट के लिए यह वही है जैसे एक स्क्रॉलबार है, लेकिन यदि स्क्रॉलबार को चालू या बंद किया जाता है (मूल दस्तावेज़ में 'स्क्रॉलिंग = "हां"/"नहीं" विशेषता का उपयोग करके, या सीएसएस' ओवरफ़्लो : iframe दस्तावेज़ में स्क्रॉल/छुपाएं) तो यह भिन्न हो सकता है।

+1

भयानक, धन्यवाद – Sebas

+0

यह उत्तर – Julian

+0

हो सकता है कि आप सभी compat मोड में 'documentElement' का उपयोग करने के बजाय' बैककॉमपेट 'के लिए क्यों परीक्षण करते हैं? – bab

0

मुझे लगता है कि आपका दूसरा प्रयास सही रास्ते पर है। this के बजाय, आपको document.body स्क्रॉल करने/जांचने का प्रयास करना चाहिए।

3
$(window).scroll(function(){ 
    if(isMyStuffScrolling()){ 
//scrolling 
    }else{ 
//not scrolling 
} 
}); 

function isMyStuffScrolling() { 
    var docHeight = $(document).height(); 
    var scroll = $(window).height() ;//+ $(window).scrollTop(); 
    if(docHeight > scroll) return true; 
    else return false; 
} 

सुधार-बदल Jon`s Winstanley कोड से थोड़ा

0

मैं इस किसी भी तत्व पर काम करता है, कम से कम क्रोम पर मिल गया है:

hasVerticalScrollbar = (element.scrollHeight > element.offsetHeight) 
     || 
(element.scrollHeight > element.clientHeight 

क्षैतिज स्क्रॉलबार पता लगाया जा सकता उसी तरह, के बजाय Width का उपयोग करना।

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