Как я могу обнаружить наличие полосы прокрутки (используя Javascript) в HTML iFrame? - PullRequest
21 голосов
/ 25 марта 2009

Как я могу обнаружить присутствие полосы прокрутки (используя Javascript) в 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;
    }

Безуспешно ..

Я искал javascript objets в DOM Inspector , но ничего не нашел.

Возможно ли обнаружить присутствие полосы прокрутки в iframe в javacscript?


Контент iframe поступает из того же домена.

Нет успеха до сих пор ..

альтернативный текст http://www.upvtp.com.br/file.php/1/help_key.jpg

Ответы [ 6 ]

42 голосов
/ 25 марта 2009
var root= document.compatMode=='BackCompat'? document.body : document.documentElement;
var isVerticalScrollbar= root.scrollHeight>root.clientHeight;
var isHorizontalScrollbar= root.scrollWidth>root.clientWidth;

Определяет, требуется ли для полосы прокрутки. По умолчанию для iframes это то же самое, что если является полосой прокрутки, но если полосы прокрутки включены или выключены (используя атрибут 'scrolling = "yes" / "no" "в родительском документе, или CSS «переполнение: прокрутка / скрытый» в документе iframe), тогда это может отличаться.

8 голосов
/ 25 марта 2009

Используя 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);
} 
3 голосов
/ 19 августа 2010
$(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

1 голос
/ 25 марта 2009

Я не думаю, что это можно сделать, если содержимое iframe пришло из другого домена из-за ограничений безопасности JavaScript.

EDIT: В этом случае, что-то вроде указания iframe name = 'someframe' и id = 'someframe2' и последующего сравнения фреймов ['someframe']. Document.body.offsetWidth с document.getElementById ('someframe2'). OffsetWidth. должен дать вам ответ.

0 голосов
/ 04 января 2018

Я нашел, что это работает на любом элементе, по крайней мере на Chrome:

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

Горизонтальные полосы прокрутки можно определить одинаково, используя Width вместо Height.

0 голосов
/ 26 марта 2009

Я думаю, что ваша вторая попытка на правильном пути. Кроме this, вы должны попробовать прокрутить / проверить document.body.

...