¿Por qué el atributo de onload del elemento de enlace no es fiable para los navegadores de acciones de Android?

var style1 = document.createElement("link"); style1.id = "rel"; style1.rel = "stylesheet"; style1.href = "http://www.mysite.com/css.css"; style1.onload = function(){document.body.innerHTML+="fffffff";}; document.getElementsByTagName("head")[0].appendChild(style1); 

Este código funciona en Chrome / Firefox y, sin embargo, los navegadores de valores de mis dispositivos Android Froyo (2.3) y Jellybean (4.1) no imprimirán nada. ¿Cuál es el problema? Me gustaría que pudiera ejecutar algunos js onload de un enlace. Cualquier otra cosa en mi caso equivale a un hack. : /

El problema no es innerHTML. Pruébelo con alertas si lo desea (a su propio riesgo).

Otra respuesta menciona la comprobación de esta funcionalidad haciendo

 var huh = 'onload' in document.createElement('link'); 

.. pero esto es cierto en ambos navegadores de valores! Chicos wtf

El navegador de Android no admite eventos "onload" / "onreadystatechange" para el elemento: http://pieisgood.org/test/script-link-events/
Pero vuelve:

 "onload" in link === true 

Por lo tanto, mi solución es detectar el navegador de Android de userAgent y luego esperar a alguna regla css especial en su hoja de estilo (por ejemplo, restablecer los márgenes "cuerpo").
Si no es un navegador Android y es compatible con el evento "onload", lo usaremos:

 var userAgent = navigator.userAgent, iChromeBrowser = /CriOS|Chrome/.test(userAgent), isAndroidBrowser = /Mozilla\/5.0/.test(userAgent) && /Android/.test(userAgent) && /AppleWebKit/.test(userAgent) && !iChromeBrowser; addCssLink('PATH/NAME.css', function(){ console.log('css is loaded'); }); function addCssLink(href, onload) { var css = document.createElement("link"); css.setAttribute("rel", "stylesheet"); css.setAttribute("type", "text/css"); css.setAttribute("href", href); document.head.appendChild(css); if (onload) { if (isAndroidBrowser || !("onload" in css)) { waitForCss({ success: onload }); } else { css.onload = onload; } } } // We will check for css reset for "body" element- if success-> than css is loaded function waitForCss(params) { var maxWaitTime = 1000, stepTime = 50, alreadyWaitedTime = 0; function nextStep() { var startTime = +new Date(), endTime; setTimeout(function () { endTime = +new Date(); alreadyWaitedTime += (endTime - startTime); if (alreadyWaitedTime >= maxWaitTime) { params.fail && params.fail(); } else { // check for style- if no- revoke timer if (window.getComputedStyle(document.body).marginTop === '0px') { params.success(); } else { nextStep(); } } }, stepTime); } nextStep(); } 

Demo: http://codepen.io/malyw/pen/AuCtH

  • El botón de Android selecciona y presiona dibujable
  • Creación de estilo predeterminado con atributos personalizados
  • Android: Cómo cambiar el color de título ListPreference?
  • No se puede reemplazar el estilo switchStyle y NumberPicker en Android
  • Establecer switchStyle - obtener error recurso no encontrado - ¿por qué?
  • Escribir aplicaciones temáticas en Android
  • Aplicación de estilo estrella a la casilla de verificación en Android
  • Recurso para descargar temas / estilos de aplicación de Android?
  • Personalizar Android ActionBar
  • Pantalla personalizada de botón de conmutación de Android
  • Android Establecer valores de textColor como Global
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.