2015-04-09 14 views
13

Non mostrava JSAlert su nessun dispositivo. E poi ho impostato un WebChromeClient:WebView non mostra JSAlert sui dispositivi Lollipop

webView.setWebChromeClient(new WebChromeClient() { 

      @Override 
      public boolean onJsAlert(WebView view, String url, String message, 
        JsResult result) { 
       return super.onJsAlert(view, url, message, result); 
      } 

      @Override 
      public boolean onJsPrompt(WebView view, String url, String message, 
        String defaultValue, JsPromptResult result) { 
       return super.onJsPrompt(view, url, message, defaultValue, 
         result); 
      } 

     }); 

ora funziona bene su tutti i dispositivi pre-lecca-lecca. E non mostra alcun avviso sui dispositivi Lollipop.

Logcat dice "Impossibile creare una finestra di dialogo, il contesto WebView non è un'attività".

+0

Sede [Mostrando un AlertDialog da un Webview al di fuori di un Attività] (http://stackoverflow.com/questions/26044179/showing-an-alertdialog-from-a-webview-outside-of-an-activity) post probabilmente aiuta –

+0

@ ρяσѕρєяK Ho già incontrato questo. Non ha aiutato. Dà lo stesso identico risultato. Inserisco effettivamente punti di interruzione nel metodo onJSAlert per verificare se è effettivamente chiamato. E non è stato così. –

+0

@SeshuVinay Il debugger passa attraverso la riga 'return super.onJsPrompt (view, url, message, defaultValue, result);'? Se sì, rimuovi la super chiamata e metti una finestra di dialogo personalizzata usando il contesto della tua attività esterna. – bonnyz

risposta

0

è necessario richiedere un permesso prima

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

Se si utilizza JScript per l'apertura in WebView. È possibile creare dialogo come questo scrivere questo codice nel tuo JScript

<input type="button" value="Display dialog" onClick="displayDialog()" /> 
    <script> 
     function displayDialog() { 
      //alert("Javascript Dialog"); 
      Android.showDialog(); 
     } 
    </script> 
</input> 

o un modo molto semplice per creare una finestra di dialogo in WebView

webView.setWebChromeClient(new WebChromeClient() { 
     @Override 
     public boolean onJsAlert(WebView view, String url, String message, JsResult result) { 
      mResult = result; 
      AlertDialog dialog = new AlertDialog.Builder(MyService.this) 
        .setTitle("test Dialog") 
        .setMessage("This is test dialog") 
        .setOnCancelListener(new CancelListener()) 
        .setNegativeButton("Cancel", new CancelListener()) 
        .setPositiveButton("Ok", new PositiveListener()) 
        .create(); 
      dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); 
      dialog.show(); 

      return true; 
     } 
    }); 

Un'ultima cosa, se questi sopra non funziona, è necessario per creare una finestra di dialogo personalizzata in Layout in modo programmatico e aggiungere la tua vista in questo. Mi piace

WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT 
       WindowManager.LayoutParams.TYPE_PHONE, 
       0, 
       PixelFormat.TRANSLUCENT); 

params.gravity = Gravity.CENTER; 

windowManager.addView(yourView, params); 
+1

se la pagina html è dinamica, come possiamo implementarla. questo è il problema. non è un file locale per aggiungere la funzione js in questo. Devo solo abilitare la finestra di avviso per la webview, non per il file locale. –

+0

Esattamente. Il mio è una pagina bancaria che entra in un gateway di pagamento. Non posso modificare quello –

+0

per me anche lo stesso @SeshuVinay –

0

Si prega di condividere il codice che si sta utilizzando per costruire la WebView. Sembra che tu lo stia costruendo con un contesto di servizio o applicazione piuttosto che con un'attività.

Si prega di provare ad utilizzare un contesto di attività.

+1

https://code.google.com/p/chromium/issues/detail?id=447607 sto usando solo il contesto delle attività , questo problema esiste solo nell'ultimo aggiornamento nel webview del sistema Android, sto cercando una soluzione per questo problema. –

+0

I second @TamilselvanKalimuthu. Il problema è con i dispositivi prelollipop.sembra essere un bug nell'ultimo androide. –

+0

Vedo, grazie per il chiarimento. Puoi provare con l'ultima versione beta di WebView nel Google Play Store? Per i dettagli, consultare https://plus.google.com/u/0/communities/105434725573080290360 – ksasq

Problemi correlati