17

Il problema generale

In Javascript, ho bisogno di essere avvisato quando c'è un errore nel caricare un URL e sovrascrivere il comportamento predefinito. Per esempio, eseguendo il seguente su iOS Safari ...Come si ignora l'evento error window.location?

window.location = 'http://pageDoesNotExist.badFormatting'; 

... apparirà questo messaggio di avviso ...

mobile safari canno open page

Vorrei allegare un listener per un errore del genere e fare qualcosa invece di mostrare una brutta casella di avviso.

Il mio problema specifico

Quando un utente tocca un pulsante, ho bisogno di lanciare la mia app, se è installato, che devo aprire l'App Store per lei per scaricare la mia app. Il accepted solution è:

// 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 
); 

Il problema qui è che il primo window.location apre la finestra di avviso brutto quando l'applicazione non è installata. Il codice ricadrà sull'App Store. Quando l'utente torna da App Store a Safari, la brutta casella di avviso è ancora lì. Per quanto ne so, window.onerror non attiva Safari mobile.

+0

Date un'occhiata a questo - http://stackoverflow.com/questions/1108693/is-it-possible-to-register-a-httpdomain-based-url-scheme-for-iphone-apps-like/1109200#1109200 – mrtsherman

+1

Penso che farai devi avere un plug-in del browser per fare qualcosa del genere perché, un po 'per definizione, quando si verifica questo errore, non c'è nessuna pagina attiva e quindi nessuna della tua pagina javascript. Quindi, il javascript dovrebbe essere integrato nel browser, quindi l'idea di utilizzare un plug-in. – jfriend00

+0

Hai dato un'occhiata a questa [soluzione] (http://stackoverflow.com/a/1404662/371392) prima? –

risposta

3

La soluzione è here.

Fondamentalmente, è possibile utilizzare i cookie per determinare se l'applicazione è installata o meno.

+0

Come fanno i cookie magicamente a far scomparire il messaggio di errore? – JoJo

+0

Non lo fanno. Sono qui solo per determinare se 'customurl: //' può essere usato o meno. –

+0

Come circa la prima volta che l'utente tocca il pulsante e il cookie non c'è? E in che modo il cookie è sincronizzato con l'installazione della tua app? Quando elimini l'app, il cookie sarà errato. – JoJo

-1

Aggiungi un object con l'attributo width="0" al markup, utilizzare l'URL della pagina come valore dell'attributo data, poi vai a iTunes se l'URL reindirizza 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'; 
    } 
+0

Gli errori in iFrame continuano a spuntare messaggi in iOS. Tuttavia, non in Android. – JoJo

Problemi correlati