2014-06-06 15 views
6

Attualmente sto integrando Stripe in un sito Web e ho riscontrato un problema con l'integrazione di verifica personalizzata.Il pulsante di verifica della striscia personalizzata non funziona sui dispositivi mobili

Ho seguito le istruzioni di integrazione personalizzate su Stripe website e funziona perfettamente sul desktop, ma purtroppo non funziona sui dispositivi mobili.

Ho un gestore in jQuery che spara quando il mio pulsante personalizzato viene cliccato, e funziona handler.open({…}), secondo i documenti, ma il seguente errore JavaScript viene registrato:

TypeError: 'undefined' is not an object (evaluating '(s=this.frame).focus') - checkout.js:2:21656 

Tutte le idee?

Edit: Dopo un sacco di suonare in giro ho scoperto che non riesce a lanciare in iOS 7 se c'è un ritardo maggiore di circa 1 secondo per la chiamata.

Ad esempio, le seguenti opere:

setTimeout(function(){stripe_payment();}, 1000); 

E la seguente non lo fa:

setTimeout(function(){stripe_payment();}, 2000); 

Negli esempi sopra riportati, stripe_payment() set up e chiama il gestore. Come detto in origine, si può avere lo stesso effetto quando si chiama il gestore dopo una chiamata AJAX (che presumibilmente richiede troppo tempo). Vale anche la pena notare che anche un ritardo di 5 secondi sui browser desktop funziona correttamente.

+0

Puoi mostrare il codice? –

+0

Ho aggiunto alcuni dettagli aggiuntivi @AndreiNemes, qualche idea? –

risposta

13

Ciò è causato dal fatto che this.frame non è definito. In checkout.js di banda, this.frame è in realtà costituito poco prima l'errore:

this.frame = window.open(this.fullPath(), "stripe_checkout_tabview") 

Il problema si verifica perché window.open fallisce. Questo a causa del blocco dei popup del browser; window.open può essere chiamato con successo solo da alcuni gestori di eventi (come una pressione di un pulsante). Se lo chiami da un timeout (sufficientemente lungo), potrebbe non riuscire.

È necessario chiamare handler.open({…}) direttamente dall'evento clic del pulsante. Nel caso in cui lo si chiami dal risultato di una richiesta AJAX, sarà necessario ridefinire il codice in modo che non sia necessario.

+4

FYI, questo è anche indirizzato (con esempi) nei documenti Stripe: https://stripe.com/docs/checkout#integration-more-runloop –

+0

Works! Avevo bisogno di farlo anche quando si utilizza una funzione di clic diretto, ma con una callback in là. –

Problemi correlati