¿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).
- Cambiar iconos del menú ActionBar según el estilo
- Estilos de ActionSherlockBar - PopupMenu
- app: el tema ahora está obsoleto
- Cambiar el fondo PreferenceActivity
- La barra de acción se ve cortada mientras se utiliza Theme.AppCompat.Dialog
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
- Base.Widget.AppCompat.Button vs Widget.AppCompat.Button
- Aplicar estilo a las vistas dinámicamente en código java
- Modificar estilos para EditText en Android
- Configuración del color del texto del botón con un estilo
- Cómo aplicar estilo personalizado global a android.support.design.widget.TextInputEditText?
- Color de divisor de selección de pestañas de barra de acción
- Android - utilizar spinner omisión sombra predeterminada
- ¿Definir el logotipo personalizado para ActionBar (diferente de Logo) en XML?
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(); }
- La vista personalizada de Android debe extender AppCompatTextView
- Xamarin android support library v7 y v13 en la misma aplicación