javascript - prevent - ¿Cómo se anula el evento de error window.location?
prevent body scrolling ios (2)
El problema general
En Javascript, necesito que se me notifique cuando se produce un error al cargar una URL y anular el comportamiento predeterminado. Por ejemplo, ejecutando lo siguiente en iOS Safari ...
window.location = ''http://pageDoesNotExist.badFormatting'';
... aparecerá este mensaje de alerta ...
Me gustaría adjuntar a un oyente por tal error y hacer algo en lugar de mostrar un cuadro de alerta feo.
Mi problema especifico
Cuando un usuario toca un botón, necesito iniciar mi aplicación si está instalada, de lo contrario, necesito abrir la App Store para que ella descargue mi aplicación. La solución aceptada es:
// Attempt to open app
window.location = ''myApp://'';
// If app fails to open, will open app store 0.5 seconds later
window.setTimeout(
function() {
window.location = ''http://itunes.apple.com/myAppId'';
},
500
);
El problema aquí es que la primera window.location
la window.location
abre el cuadro de alerta feo cuando la aplicación no está instalada. El código luego retrocederá a la App Store. Cuando el usuario regresa de la tienda de aplicaciones a Safari, el cuadro de alerta feo todavía está allí. Por lo que sé, window.onerror
no dispara en Safari móvil.
Agregue un object
con el atributo width="0"
a la marca, use la URL de la página como el valor del atributo de data
, luego vaya a iTunes si la URL redirige a un 404:
/* Find object element */
var hrefobj = document.querySelector("object");
/* Assign protocol string to data attribute of object element */
hrefobj.data = ''myApp://'';
/* If the assignment fails */
if (hrefobj.data !== ''myApp://'')
{
/* Redirect the window to the fallback URL */
window.location = ''http://itunes.apple.com/myAppId'';
}
Tu solución está aquí .
Básicamente, puede usar cookies para determinar si su aplicación está instalada o no.