web-dev-qa-db-ja.com

HTML iFrameで(Javascriptを使用して)スクロールバーの存在を検出するにはどうすればよいですか?

HTML iFrameで(Javascriptを使用して)スクロールバーの存在を検出するにはどうすればよいですか?

私はすでに試しました:

        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;
    }

成功しませんでした。

DOM Inspectorjavascript objetsを検索しましたが、何も見つかりませんでした。

Javacscriptのiframeでスクロールバーの存在を検出することは可能ですか?


Iframeコンテンツは同じドメインからのものです。

今まで成功しませんでした。

代替テキストhttp://www.upvtp.com.br/file.php/1/help_key.jpg

21
Bonfocchi

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);
} 
9
Jon Winstanley
var root= document.compatMode=='BackCompat'? document.body : document.documentElement;
var isVerticalScrollbar= root.scrollHeight>root.clientHeight;
var isHorizontalScrollbar= root.scrollWidth>root.clientWidth;

これは、スクロールバーにneedがあるかどうかを検出します。デフォルトのiframeの場合、これはスクロールバーがisあるかどうかと同じですが、スクロールバーが強制的にオンまたはオフになる場合( 'scrolling = "yesを使用)親ドキュメントの "/" no "'属性、またはCSS'オーバーフロー:iframeドキュメントのscroll/hidden ')の場合、これは異なる場合があります。

42
bobince
$(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のWinstanleyコードから少し変更

3
gadlol

JavaScriptのセキュリティ制限のため、iframeコンテンツが別のドメインからのものである場合はこれを実行できないと思います。

編集:その場合、iframeにname = 'someframe'およびid = 'someframe2'を付けてから、frames ['someframe']。document.body.offsetWidthをdocument.getElementById( 'someframe2')と比較することに沿った何か.offsetWidthが答えを与えるはずです。

1
mike nvck

これは、少なくともChromeでは、どの要素でも機能することがわかりました。

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

水平スクロールバーは、Widthの代わりにHeightを使用して同じように検出できます。

0
LeeGee

2回目の試みは正しい方向に進んでいると思います。 thisの代わりに、document.bodyをスクロール/チェックしてみてください。

0
levik