web-dev-qa-db-fra.com

Comment détecter une présence de barre de défilement (avec Javascript) dans HTML iFrame?

Comment détecter une présence de barre de défilement (avec Javascript) dans HTML iFrame?

J'ai déjà essayé:

        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
    }

Et j'avais aussi essayé:

           this.scrollLeft=1;
    if (this.scrollLeft>0) {
        //when theres a scrollbar
        this.scrollLeft=0;
        }else{
        //when theres not a scrollbar
        return false;
    }

Sans succès ..

J'ai cherché le objets javascript sur Inspecteur DOM, mais je n'ai rien trouvé.

Est-il possible de détecter une présence de barre de défilement dans une iframe en javacscript?


Le contenu de l'iframe provient du même domaine.

Pas de succès jusqu'à présent ..

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

21
Bonfocchi

En utilisant jQuery, vous pouvez comparer la hauteur du document, la position de scrollTop et la hauteur de la fenêtre d'affichage, ce qui peut vous donner la réponse souhaitée.

Quelque chose dans le genre de:

$(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;

Ceci détecte s'il existe un besoin pour une barre de défilement. Par défaut, iframes est identique à est une barre de défilement, mais si les barres de défilement sont activées ou désactivées (en utilisant l'attribut 'scrolling = "yes"/"no"' dans le document parent, ou débordement CSS: scroll/hidden dans le document iframe), cela peut différer.

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

amélioré-modifié un peu du code Winstanley de Jon

3
gadlol

Je ne pense pas que cela puisse être fait si le contenu d'iframe provient d'un autre domaine en raison de limitations de sécurité JavaScript.

EDIT: Dans ce cas, vous pouvez donner à l’iframe un nom = 'une image' et une id = 'une image2', puis comparer les images ['une image']. Document.body.offsetWidth avec document.getElementById ('someframe2'). offsetWidth devrait vous donner la réponse.

1
mike nvck

J'ai trouvé que cela fonctionne sur n'importe quel élément, du moins sur Chrome:

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

Les barres de défilement horizontales peuvent être détectées de la même manière, en utilisant Width au lieu de Height.

0
LeeGee

Je pense que votre deuxième tentative est sur la bonne voie. Excepté au lieu de this, vous devriez essayer de faire défiler/vérifier document.body.

0
levik