2015-08-24 13 views
5

Im inaudito alle visualizzazioni Web e sta tentando di eseguire un'app che lo utilizza. Ho un popup che viene visualizzato utilizzando javascript. Ha un pulsante di chiusura per chiudere. Insieme al pulsante di chiusura, voglio utilizzare il pulsante back nativo.Cattura l'evento nativo del pulsante di ritorno dalla visualizzazione Web

Cioè, se l'utente fa clic sul pulsante Indietro, il mio popup dovrebbe essere chiuso.

Il mio dubbio è, richiede modifiche dall'app nativa? Oppure le visualizzazioni web convertono l'azione del pulsante Indietro in eventi come Keypress che la webview può comprendere?

+0

Si sta utilizzando PhoneGap? Che cosa stai usando esattamente? – Buzinas

+0

Puoi aggiornare dove sei @goose? –

risposta

2

Non so se si dispone del supporto HTML5, ma in tal caso history.pushState e dall'API Cronologia faranno esattamente ciò che si desidera.

Quando viene visualizzato il popup, utilizzare pushState per informare il browser di una nuova voce di cronologia, come se il popup fosse invece una nuova pagina.

Quindi aggiungere un listener di eventi a history.onpopstate che chiude il popup, se è aperto.

+0

Stai suggerendo che dovrei ascoltare gli eventi sopra citati ed eseguire l'azione ravvicinata quando spara? – Ivin

+0

Sì! Modificato per elaborare! –

1

Se si utilizza Cordova, offre un evento per monitorare il pulsante indietro su dispositivi Android:

document.addEventListener("backbutton", yourCallbackFunction, false); 

È possibile ignorare questo evento e implementare il proprio comportamento. Oltre a questo non ci dovrebbe essere un modo per tenere traccia dell'evento del pulsante Indietro.

+0

Non sto usando Cordova per questo progetto. – Ivin

2

Si potrebbe provare a mescolare un po 'di domanda e le loro soluzioni:

  1. Intercept l'evento back button rubinetto in Android

  2. Exec a js function all'interno del WebView (dall'esterno)

  3. Che will trigger an event in il documento

  4. Elenco it a questo evento utilizzando document.addEventListener e qui chiudere la finestra di dialogo/avviso

1

Cliccando BackButton sarebbe chiudere il viewcontroller che mostra la modale.

Immagino che tu non voglia che ciò accada, e basta chiudere il javascript modal.

Sì, sarebbe necessario modificare il codice nativo.

On native backbutton click, 

if your modal is open: 
    close the modal 
else: 
    do default backbutton action. 

Di seguito è riportata una spiegazione dettagliata.

On native backbutton click # your native code to intercept the back button 

if your modal is open: 
# there are multiple options here 
# first strategy 
# let javascript inform native side when it opens/closes popup 
# native just needs to check the status he has 
# second strategy 
# native asks javascript if he has a modal open 
# this is a bit tricky because native can't get a return value from javascript 
# native asks javascript to tell native if he has a modal open (native->javascript + javasciprt -> native two function calls) 
# native checks what javascript just said 

    close the modal 
    # this is easy, ask javascript to close it. 

ho pensato si sa come comunicare tra javascript & nativo, se non dare un'occhiata a http://www.smashingmagazine.com/2013/10/best-of-both-worlds-mixing-html5-native-code/

1

Per aiutare ulteriormente ciò lifeisfoo dichiarato:

public class WebViewer 
WebView webView; 
@Override 
public void onBackPressed() { 
    if (webView.hasPopUp()) { 
     webView.loadUrl("javascript:closePopUp()"); 
    } else { 
     super.onBackPressed(); 
    } 
} 
Problemi correlati