2012-06-22 6 views
7

¿Hay algún método confiable para detectar si el navegador es compatible con position fixed?Detectar si el navegador admite la posición: fijo

He encontrado algunas soluciones pero ninguna de ellas parece funcionar bien en todos los navegadores.

+0

¿Para qué elemento? –

+0

¿Quiere decir algo para * pie de página * o similar? –

Respuesta

9

Al desarrollar una aplicación móvil con jQuery Mobile tuve el mismo problema. Las cabeceras deberían haber posición fija (si es compatible con el navegador) y la solución se para establecer las cabeceras con un valor predeterminado position: fixed en el css y comprobado la propiedad apoyado a través del siguiente método:

function isPositionFixedSupported() { 
    return $('[data-role="header"]').css('position') === 'fixed'; 
} 

el valor devuelto es static si no es compatible con el navegador.

3

Este código funciona completamente bien. Acabo de probarlo en un cuadro Windows ME con IE6, devuelve 'nulo' porque IE6 no es compatible con position:fixed;.

por cierto, este NO es mi código original. TODOS los créditos van aKangax's Githubquien tiene muchas funciones allí para probar las características del navegador.

function() { 
    var container = document.body; 
    if (document.createElement && 
    container && container.appendChild && container.removeChild) { 
    var el = document.createElement("div"); 
    if (!el.getBoundingClientRect) { 
     return null; 
    } 
    el.innerHTML = "x"; 
    el.style.cssText = "position:fixed;top:100px;"; 
    container.appendChild(el); 
    var originalHeight = container.style.height, originalScrollTop = container.scrollTop; 
    container.style.height = "3000px"; 
    container.scrollTop = 500; 
    var elementTop = el.getBoundingClientRect().top; 
    container.style.height = originalHeight; 
    var isSupported = elementTop === 100; 
    container.removeChild(el); 
    container.scrollTop = originalScrollTop; 
    return isSupported; 
    } 
    return null; 
} 

Si funciona, funciona, si no lo hace, obtendrá un valor nulo.

+0

Esta solución no funciona en iOS 5. –

+0

Eso es porque IOS5 es una mujer voluble. Consulte los documentos sobre [posición: fija y última distribución de jQM] (http://jquerymobile.com/blog/2012/04/13/announcing-jquery-mobile-1-1-0/) – Ohgodwhy

+0

¿Es esto lo único conocido? ¿problema? ¿Es seguro utilizar este método seguido de una excepción a iOS 5? –

-1

El código de Ohgodwhy es correcto, pero para iOS, puede consultar el agente de usuario y ver si se trata de iOS Safari. Luego devuelve que sea compatible. Las cadenas de agente de usuario son

Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3 
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3 
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7 

No estoy seguro de cómo codificar esto, pero estoy seguro de que esto es lo que hay que hacer para detectar IOS.

+2

El rastreo del dispositivo no es ni será una forma confiable de detectar funciones en todos los navegadores. – user2867288

1

¿Algo como esto funciona en los navegadores móviles?

function isFixedPositionSupported() { 
    var e = document.createElement('div') 
    try { 
     e.style.position = 'fixed' 
     return e.style.position == 'fixed' 
    } catch (exception) { 
     return false 
    } 
} 
+1

No funciona, la devolución siempre es verdadera incluso si no es compatible. –

+0

Trabaja en Firefox y Chrome. – fred727

1
var supportFixed = (function() { 
    var elem = document.createElement('div'); 
    elem.style.cssText = 'position:fixed'; 
    if (elem.style.position.match('fixed')) return true; 
    return false; 
}()); 
+0

esta parece ser la mejor solución para mí con diferencia. utilicé jquery estar a salvo. var $ test = $ ("

"); $ ("cuerpo"). Append ($ test); $ test.css ("posición", "fijo"); var supportFixed = $ test.css ("position") === "fixed"; $ test.remove(); --- pero esto no solucionó mi problema.ios4 dice que admite arreglos fijos, aunque no es así. –

+0

Da positivo falso en iPad debido a su pseudo soporte de posición: fijo – nebulousGirl

Cuestiones relacionadas