2012-09-16 10 views

risposta

2

Volete verificare se dell'elemento scrollHeight è maggiore del clientHeight, o se l'elemento del scrollWidth è maggiore della clientWidth. Questo può essere fatto con queste proprietà direttamente o usando i metodi di supporto forniti da jQuery.

MDN: element.scrollHeight

If the element's content generated a vertical scrollbar, the scrollHeight value is equal to the minimum clientHeight the element would require in order to fit all the content in the viewpoint without using a vertical scrollbar. When an element's content does not generate a vertical scrollbar, then its scrollHeight property is equal to its clientHeight property. This can mean either the content is too short to require a scrollbar or that the the element has CSS style overflow value of visible (non-scrollable).

+0

Questo metodo richiede che il contenuto del iframe essere ospitato sullo stesso server, o può essere cross-domain? – Olokoo

+0

Può essere perché l'elemento iframe è nel tuo dominio. Il contenuto non è (necessariamente), ma il contenuto definirà la scrollWidth e scrollHeight dell'iframe e non importa altrimenti. – jimp

+7

Ho provato questo, e non ha funzionato, ottengo lo stesso risultato per entrambi, e sono entrambi l'altezza dell'elemento. \t funzione checkScroll() { \t \t \t var intElemScrollHeight = document.getElementById ('websiteView'). ScrollHeight; \t \t \t var intElemClientHeight = document.getElementById ('websiteView'). ClientHeight; \t \t \t avviso (intElemScrollHeight); \t \t \t avviso (intElemClientHeight); \t \t} – Olokoo

1

, in generale, si dovrebbe confrontare il delta del dell'elemento scrollHeight/scrollWidth e offsetHeight/offsetWidth. se positivo allora 'abbiamo un vincitore'. ma .. quando alla ricerca di barre di scorrimento in un iframe, le cose si fanno un po 'po' più complicato:

var frm=document.getElementById("frm"); 
var iIsVrScrollBar = frm.contentWindow.document.documentElement.scrollHeight>frm.contentWindow.document.documentElement.offsetHeight ? 1 : 0; 
var iIsHrScrollBar = frm.contentWindow.document.documentElement.scrollWidth>frm.contentWindow.document.documentElement.offsetWidth ? 1 : 0; 
+1

Dovresti aggiungere che funziona solo se l'iframe src proviene dalla stessa origine della pagina web che lo ospita. Un errore di esempio potrebbe essere: "Uncaught SecurityError: Bloccato un frame con origine" http: // ... "dall'accesso a un frame con origine" https: // ..... ".Il frame che richiede l'accesso ha un protocollo di "http", il frame a cui si accede ha un protocollo di "https". I protocolli devono corrispondere. – gae123

0

ho dovuto modificare il codice per farlo funzionare.

1) IFRAME & contenuti sono sulla stessa struttura del sito/cartella

2) la procedura viene istigata impostando "sizewindow" TRUE

3) frammento fa parte di un insieme funzione timer a Anout 0,5 secondi

4) testati su IE11, FF34 & 35, Cromo 31 & 40, & Opera 12,6

5) c attivo ode dimensioni della finestra per poco più grande di contenuti,

vedere http://www.users.waitrose.com/~cresby/map2.htm

if (sizewindow){ 
    if(iIsVrScrollBar==1) { 
    frm.style.height = (frm.contentWindow.document.body.offsetHeight+20); 
    iIsVrScrollBar = (frm.scrollWidth!=frm.contentWindow.document.documentElement.scrollWidth) ? 1 : 0; 
    if(iIsVrScrollBar==0) sizewindow=false; 
}else{ 
    frm.style.height = (frm.contentWindow.document.body.offsetHeight-10); 
    iIsVrScrollBar = (frm.scrollWidth!=frm.contentWindow.document.documentElement.scrollWidth) ? 1 : 0; 
    if(iIsVrScrollBar==1) {frm.style.height = (frm.contentWindow.document.body.offsetHeight+10);} 
} 
} 
Problemi correlati