2012-09-16 11 views

Respuesta

2

desea comprobar si el elemento de scrollHeight es mayor que el clientHeight, o si el elemento de scrollWidth es mayor que el clientWidth. Esto se puede hacer con esas propiedades directamente, o mediante el uso de métodos auxiliares proporcionados por 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

hace esto método requiere que el contenido del iframe estar alojada en el mismo servidor, o puede ser de varios dominios? – Olokoo

+0

Puede ser porque el elemento iframe está en su dominio. El contenido no es (necesariamente), pero el contenido finalmente definirá scrollWidth y scrollHeight del iframe y no importa lo contrario. – jimp

+7

Intenté esto, y no funcionó, obtuve el mismo resultado para ambos, y ambos son la altura del elemento. \t \t función checkScroll() { \t \t \t var intElemScrollHeight = document.getElementById ('websiteView'). ScrollHeight; \t \t \t var intElemClientHeight = document.getElementById ('websiteView') clientHeight.; \t \t \t alerta (intElemScrollHeight); \t \t \t alerta (intElemClientHeight); \t \t – Olokoo

1

, en general, se debe comparar el delta del elemento scrollHeight/scrollWidth y offsetHeight/offsetWidth. si es positivo, entonces 'tenemos un ganador'. pero .. en la búsqueda de las barras de desplazamiento en un iframe, las cosas se ponen un poco de poco más complicado:

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

Debe agregar que esto solo funciona si el ifrme src viene del mismo origen que la página web que lo hospeda. Un error de ejemplo sería: "Unbeught SecurityError: Blocked a frame with origin" http: // ... "from access to a frame with origin" https: // ..... ".El marco que solicita acceso tiene un protocolo de "http", el marco al que se accede tiene un protocolo de "https". Los protocolos deben coincidir. – gae123

0

tuve que modificar el código para conseguir que funcione.

1) la IFRAME & contenidos están en la misma estructura del sitio web/carpeta

2) el procedimiento es instigado ajustando "sizewindow" TRUE

3) que fragmento se parte de un conjunto de funciones de temporizador en anout 0,5 segundos

4) ensayados en EI11, FF34 & 35, Chrome 31 & 40, & Opera 12,6

5) c activo oda tamaño de la ventana a poco más grande que el contenido,

ver 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);} 
} 
} 
Cuestiones relacionadas