13

¿Es posible detectar si ciertos eventos son compatibles con ciertos navegadores? Puedo detectar si el navegador es compatible con document.addEventListener, pero necesito saber si admite el evento DOMAttrModified. Firefox y Opera lo admiten, pero Chrome y otros no.Javascript - detectar si se admite el evento lister

¡Gracias si alguien puede ayudar!

+1

no creo que es posible, sin embargo mira aquí para ver soporte para IE y Chrome, así: http://help.dottoro.com/ljdchxcl.php –

+0

Gracias, sin embargo ya tengo soluciones de trabajo para todos navegadores. Esperaba una forma de detectar si ciertos navegadores soportaban el evento para poder aplicar mis métodos alternativos. Parece que tendré que recurrir a la detección jQuery.browser. –

Respuesta

15

respuesta Actualizado:

, que se pueden caracterizar por detectar esto. Cree un elemento, escuche el evento y cambie un atributo en el elemento. En mis pruebas, ni siquiera tiene que agregar el elemento al árbol DOM, lo que lo convierte en una detección de funciones contenida y agradable.

Ejemplo:

function isDOMAttrModifiedSupported() { 
    var p, flag; 

    flag = false; 
    p = document.createElement('p'); 
    if (p.addEventListener) { 
     p.addEventListener('DOMAttrModified', callback, false); 
    } 
    else if (p.attachEvent) { 
     p.attachEvent('onDOMAttrModified', callback); 
    } 
    else { 
     // Assume not 
     return false; 
    } 
    p.setAttribute('id', 'target'); 
    return flag; 

    function callback() { 
     flag = true; 
    } 
} 

Live copy

Firefox desencadena la devolución de llamada en todas las modificaciones anteriores; Chrome en ninguno de ellos.


Respuesta original:

Se pueden caracterizar-detectar si algunos eventos son compatibles, como se muestra en this handy page. No sé si puedes probar específicamente para eso, pero si puedes, ese código puede ayudarte a comenzar.

actualización: Me dumped Kangax's code into JSBin y probado, no se parece que la técnica funciona olfateando para ese evento (a menos que tenga el nombre mal escrito o algo; Firefox está mostrando "falso"). Pero mi técnica anterior sí lo hace.

+0

wow, 'document.body: haga clic? falso' en FF 4 !! – ifaour

+0

@ifaour: Wow, eso ** es ** raro. También FF 3.6. Y, sin embargo, todos sabemos que eso no es cierto ... –

+0

ppk indica [aquí] (http://www.quirksmode.org/dom/events/index.html#link2) que el evento de tipo 'DOMAttrModified' no funciona con el sistema tradicional de registro de eventos 'onEvent', entonces eso es probablemente lo que rompió la prueba que tienes allí, que solo busca la propiedad' onEvent' en el elemento –

0
function isDOMAttrModifiedSupported() { 
    var supported = false; 
    function handler() { 
     supported = true; 
    } 
    document.addEventListener('DOMAttrModified', handler); 
    var attr = 'TEST'; 
    document.body.setAttribute(attr, 'foo'); // aka $('body').attr(attr, 'foo'); 
    document.removeEventListener('DOMAttrModified', handler); 
    document.body.setAttribute(attr, null); 
    return supported; 
    } 
Cuestiones relacionadas