2015-08-16 11 views
11

L'ultima versione di iOS (8.4.1) sembra aver rotto la nostra app ngCordova.Impossibile aprire collegamenti (e clic) con Cordova su iOS 8.4.1

I nostri collegamenti in genere non si aprono, a prescindere da href direttamente, ng-clic o ng-href. Alcuni si apriranno dopo un clic ripetuto e gli hrefs hanno un menu a comparsa che ci consente di selezionare "apri", "copia" o "cancella" se facciamo clic su di essi per un periodo di tempo.

Il problema non distingue tra pulsante o tag. Alcuni tag sembrano funzionare bene.

Eravamo su versioni precedenti di cordova e ngcordova, ma l'aggiornamento non ha risolto questo problema.

Ho anche provato a disabilitare la selezione utente, ma non è stato risolto.

Questo problema si verifica solo sul dispositivo, non nell'emulatore.

Utilizziamo la direttiva angular-mobile-ui modificabile per un sidemenu e l'evento di attivazione si attiva quando si fa clic sui collegamenti nel sidemenu, ma il collegamento non reindirizza.

risposta

2

Sono stato in grado di risolvere il problema installando la libreria fastclick. FastClick

+1

Anche interessato in una delle nostre app con FastClick 0.6.11, risolto con l'ultima versione di FastClick –

0

Puoi provare a reinstallare il vostro inAppBrowser plug

0

Penso di aver avuto lo stesso problema, anche se penso che sia a che fare con eventi click, piuttosto che i collegamenti in particolare. La mia applicazione non utilizza angolari, solo jQuery, alcuni plugin jQuery ..

  • Transit
  • hammer.js
  • Fastclick
  • calcolatrice (legno Keith)
  • base64
  • plug

.. e alcuni plug-in PhoneGap/Cordova ..

  • cc.fovea.cordova.purchase 3.10.1 "Acquisto"
  • Cordova-plugin-console 1.0.0 "Console"
  • Cordova-plugin-dialoghi 1.0.0 "Notifica"
  • Cordova -plugin-inappbrowser 1.0.0 "InAppBrowser"
  • Cordova-plugin-whitelist 1.0.1-dev "White list"
  • de.appplant.cordova.plugin.email-compositore 0.8.2 "EmailComposer"
  • hu .dpal.phonegap.plugins.PinDialog 0.1.3 "PinDialog"
  • org.apache.cordova.splashscreen 1.0.0 "Splashscreen"
  • uk.co.ilee.touchid 0.2.0 "ID Touch"

Ho molti pulsanti sul mio app, e con questo Aggiornamento iOS solo (8.4.1), ho trovato che alcuni di essi funzionavano e altri no.

E.g.questo è il markup per uno dei pulsanti che ha smesso di funzionare:

<div class="button theme-bg" id="add-budget"><span>Add Budget</span></div> 

E questo è il jQuery associato:

$('#add-budget').on('click', function (e) { 
    // do stuff 
}); 

Questo ha funzionato bene da iOS 7.0 fino a 8.4. Si è rotto solo su 8.4.1.

Alla fine, ho trovato che l'aggiunta delle seguenti regole CSS a questo pulsante risolto il problema:

width: 100%; 
float: left; 
overflow: hidden; 

Non ho assolutamente idea del perché questo ha funzionato. Sarebbe bello se qualcuno potesse spiegare il perché. L'ho capito solo osservando le regole CSS dei pulsanti che hanno funzionato e applicandole ai pulsanti interrotti.

In ogni caso, spero che funzioni anche per gli altri. Questo è un problema orrendo con 8.4.1 - specialmente perché questo aggiornamento avrebbe dovuto influenzare solo Apple Music! Ho dovuto rimuovere la mia app da tutti gli App Store!

Questa è la lista completa delle regole applicate ai pulsanti miei (ora di lavoro):

.button { 
    height: 50px; 
    line-height: 50px; 
    text-align: center; 
    font-size: 14px; 
    font-weight: bold; 
    color: #fff; 
    display: block; 
    -webkit-box-sizing: border-box; 
    cursor: pointer; 
    text-decoration: none; 
    text-transform: uppercase; 
    letter-spacing: -0.07em; 
    -webkit-box-shadow: 0px 8px 15px rgba(50, 50, 50, 0.1); 
    position: relative; 

    /* 3 new rules added to fix the buttons: */ 
    width: 100%; 
    float: left; 
    overflow: hidden; 
} 
.theme-bg { 
    background: #F88319; 
    -webkit-transition: background 0.7s; 
} 
+0

ho finito per risolverlo utilizzando la libreria Fastclick https://github.com/ftlabs/fastclick – mjabraham

+0

Il mio progetto è stato già utilizzando Fastclick, e avevo ancora il problema. Lo chiamo in questo modo: FastClick.attach (document.body); –

0

Sto affrontando lo stesso problema con ios progetto costruire da Cordova versione 3.5 Il problema è stato risolto quando ho aggiornato Cordova alla versione più recente (5.1.1) e ricostruire progetto

io non sono sicuro che è causa principale, ma sta funzionando bene con me

P/s: Il mio progetto utilizzando angularjs e Cordova

4

Ho lo stesso problema. Vedere il changelog di sicurezza da parte di Apple qui https://support.apple.com/en-us/HT205030

Impatto: un sito web malevolo può fare un evento di rubinetto produrre un sintetico click su un'altra pagina Descrizione: un problema esisteva in modo sintetico scatti sono generati da eventi rubinetto che potrebbero causare clicca per target altre pagine. Il problema è stato risolto tramite la propagazione con clic limitato .

Penso che il problema derivi da questo cambiamento.

Quello che puoi fare è aggiungere l'evento touchstart ai tuoi eventi click. Questo ha risolto il mio problema per ora finché non trovo una soluzione migliore.

$('button').on('click touchstart', function(){ 
    // Click event 
}); 
+0

Abbiamo trovato la stessa cosa --- fastclick l'ha risolto per noi. – mjabraham

+0

Stavo già usando fastclick, ma avevo ancora il problema. –

1

Si sta utilizzando la libreria FastClick? Puoi provare ad aggiornare all'ultima versione?

Abbiamo riscontrato lo stesso problema con iOS 8.4.1 e FastClick versione 0.6.7. Quando abbiamo aggiornato alla versione più recente della libreria FastClick, il problema è stato risolto. Non sei sicuro di come e perché funzioni, ma ha funzionato per noi!

3

L'utilizzo dell'ultima versione di FastClick ha funzionato per me.

5

Un altro modo è quello di impostare la proprietà css come questo (che funziona per me):

button:active { opacity: 1 !important; } 

Qualcosa abbastanza stupido che non riuscivo a capire, ma penso che sia qualcosa legato ad Apple scritto: https://support.apple.com/en-us/HT205030

"Impatto: un sito web malevolo può fare un evento di rubinetto produrre un sintetico click su un'altra pagina Descrizione: un problema esisteva in modo sintetico scatti sono generati da eventi che potrebbero toccare CAUS e clicca per targetare altre pagine. Il problema è stato affrontato attraverso limitati click propagazione."

quindi suppongo che se il pulsante sullo stato attivo è impostato l'opacità inferiore a 1, Apple dovrebbe prendere in considerazione che si tratta di uno scatto sintetico.

+1

+1 Questa correzione ha funzionato per me. Ho aggiornato la libreria fastclick e non è successo nulla, ma l'opacità del pulsante di impostazione su 1.0 ha funzionato – atc

0

Posso garantire personalmente Fastlink per risolvere questo problema sulla nostra app che funziona su Backbone/Marionette. L'abbiamo implementato e i nostri eventi click JavaScript hanno funzionato come previsto, e non è stato necessario passare dal metodo click a nessun altro. sta interessando anche i menu a discesa CSS (che la nostra app non ha). Qualcuno può garantire gli hack CSS menzionati sopra per risolvere il problema?

0

Ho provato tutte le soluzioni sopra:

- opacità: 1; = nessun effetto
- FastClick = peggio che non funziona (attiva i collegamenti nascosti sotto il sottomenu CSS)
- Ho creato una soluzione vistosa con l'evento touchStart, ma non è una soluzione permanente decente. Sto anche andando a testare la soluzione short touchStart sopra, ma ho mantenuto il sito super-leggero, quindi non sto nemmeno usando JQuery e dovrò riscriverlo.
- Fastlink = non so dove trovare questo JS

mio menù è un semplice sottomenu CSS-only .. no Javascript affatto. Fino ad ora, dal momento che Apple sembra averlo richiesto! (E le persone con JS disattivate non possono più navigare nel sito.)

Ma non ho ancora trovato una buona soluzione anche con JS per risolvere questo problema globale che ha creato Apple!

più discussione su questo argomento in questo intervento nella comunità Apple: https://discussions.apple.com/message/28790737

+0

Provato questo: a: active {opacity: 1! Important; } – RickSF

+0

Questo tipo di funziona, ma è specifico per pureCSSmenu: var lastTouch; function touchStart (evento) { var currentElement = event.target; if (currentElement.parentElement.nodeName == 'LI' && currentElement.className! = 'PureCssMenui0') {location.href = currentElement.href; } if (currentElement.tagName == 'A' && currentElement.className == 'pureCssMenui0') { \t event.preventDefault(); \t \t if (currentElement.href! = LastTouch) {lastTouch = currentElement.href; } else {location.href = currentElement.href; } } } this.addEventListener ("touchstart", touchStart, false); – RickSF

0

questo ha funzionato per me:

a, button { opacity:1 !important; } 

THX arzanardi

0

ho avuto gli stessi problemi con Cordava 4.1.2 e iOS 8.4.1, risolvo il problema aggiornando FastClick

0

Ho lo stesso tipo di problema che ho risolto utilizzando css.ho aggiunto sotto css e ha funzionato per me.

z-index:10000000;