2015-04-09 5 views
13

Es wurde JSAlert auf keinem Gerät angezeigt. Und dann habe ich einen WebChromeClient:WebView zeigt JSAlert auf Lollipop-Geräten nicht an

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

     }); 

Jetzt funktioniert es gut auf allen Pre-Lollipop-Geräten. Und zeigt keine Warnung auf Lollipop-Geräten.

Logcat sagt "Kann keinen Dialog erstellen, der WebView-Kontext ist keine Aktivität".

+0

See [Zeige eine Alertdialog von einem Webview außerhalb eines Aktivität] (http://stackoverflow.com/questions/26044179/showing-an-alertdialog-from-a-webview-outside-of-an-activity) Beitrag wahrscheinlich helfen –

+0

@ ρяσѕρєяK Ich bin schon darauf gestoßen. Es hat nicht geholfen. Gibt das gleiche Ergebnis. Ich habe in der onJSAlert-Methode Breakpoints gesetzt, um zu prüfen, ob sie tatsächlich aufgerufen werden. Und es tat es nicht. –

+0

@SeshuVinay Führt der Debugger durch die Zeile 'return super.onJsPrompt (view, url, message, defaultValue, Ergebnis);'? Wenn ja, entfernen Sie den Superaufruf und fügen Sie einen benutzerdefinierten Dialog mit dem Kontext Ihrer äußeren Aktivität ein. – bonnyz

Antwort

0

Es braucht eine Erlaubnis erste

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

benötigen Wenn Sie JScript in webview zum Öffnen verwenden. Sie können Dialog wie diese schreibt diesen Code in Ihren jscript erstellen

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

oder eine sehr einfache Art und Weise einen Dialog 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; 
     } 
    }); 

Eine letzten Sache zu schaffen, wenn diese oben funktionieren nicht Sie benötigen Erstellen Sie ein benutzerdefiniertes Dialogfeld im Layout pro-grammatisch und fügen Sie Ihre Ansicht hinzu. Wie

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

Wenn diese HTML-Seite dynamisch ist, wie können wir das umsetzen? das ist das Problem. Es ist keine lokale Datei, in der js Funktion hinzugefügt wird. Ich muss nur das Warnfenster für die Webansicht aktivieren, nicht für die lokale Datei. –

+0

Genau. Meine ist eine Bankseite, die in einem Zahlungsgateway geliefert wird. Ich kann nicht bearbeiten, dass –

+0

für mich auch die gleiche @SeshuVinay –

0

Bitte teilen Sie den Code, den Sie verwenden, um das WebView zu erstellen. Es klingt, als ob Sie es mit einem Service- oder Anwendungskontext und nicht mit einer Aktivität erstellen.

Versuchen Sie es bitte mit einem Aktivitätskontext.

+1

https://code.google.com/p/chromium/issues/detail?id=447607 ich Aktivitätskontext nur verwende , dieses Problem existiert nur in der neuesten Aktualisierung in Android-System Webview, suche ich Lösung für dieses Problem. –

+0

Ich zweite @TamilselvanKalimuthu. Problem ist mit Prelollipop-Geräten.scheint ein Fehler in der neuesten Android zu sein. –

+0

Ich sehe, danke für die Klarstellung. Kannst du es mit der neuesten Beta-Version von WebView im Google Play Store versuchen? Details finden Sie unter https://plus.google.com/u/0/communities/105434725573080290360 – ksasq

Verwandte Themen