Android Webview SKIPS Javascript auch mit setJavascriptEnabled (true) und WebChromeClient

(Mit Samsung Galaxy Tab und Android 3.0, ist dies beabsichtigt, auf jedem 3.0 + Tablette arbeiten, wie es in ihren Browsern, nur nicht Webview)

Ich habe eine Seite mit CSS und jQuery, die gut in Browsern, Android-Browsern und iOS-Geräte lädt, aber Android-Webview weigert sich, es konsequent zu laden.

  • Firebase Dynamic Link nicht öffnen die App
  • Animation zum Übergang zwischen Ansichten mit Rotation auf z-Achse mit Tiefenwahrnehmung
  • Spinner mit Checkbox Artikel, ist es möglich?
  • Wie bekomme ich eine ausführliche Anmeldung in der Logcat für ein bestimmtes Modul
  • Google Maps Android API v2: Visualisierung des Suchradius mit Hilfe von ValueAnimator
  • Einstellen von Button Text Schriftart in Android
  • Ich habe das Problem verengt, um es einfach überspringen Javascript auf Last (durch die Replikation des Problems mit einigen Webview Javascript Demo-Apps). Warum ist das?

    HIER IST DAS KOMPLETTE TEST HTML CODE http://pastebin.com/GmE2vEYx

    Und hier ist, wie ich es nennen

      myWebview.loadUrl("file:///android_asset/myPage.html"); myWebview.getSettings().setJavaScriptEnabled(true); myWebview.setWebChromeClient(new WebChromeClient()); 

    Die Bestellung dieser drei Anrufe wirkt sich nicht auf das Ergebnis aus.

      myWebview.getSettings().setJavaScriptEnabled(true); myWebview.setWebChromeClient(new WebChromeClient()); myWebview.loadUrl("file:///android_asset/myPage.html"); 

    Eine Sache, die ich bemerkt habe, ist, dass, wenn Sie es Zeit geben (indem Sie die App mit einem Haltepunkt im Debugger pausieren), dann wird das Javascript konsequent geladen. Dies führte mich zu einigen weit hergeholten Experimenten zu versuchen, die App langsamer zu machen, aber das ist wirklich nicht die gewünschte User Experience. Ich hoffe wirklich, dass Android-Webview wirklich nicht die IE6 der mobilen Entwicklung sind.

    Zusätzliche Fakten:

    Wenn Sie die <script> -Tags entfernen, die alle Jquery enthalten, lädt die Seite schnell mit der gesamten CSS-Formatierung. Sobald die Jquery hinzugefügt ist, lädt sich gar nichts.

    Ich habe auch einige andere Fragen gefunden, die genau das gleiche Problem begegnen, viele gehen unbeantwortet oder haben keine schlüssige Antwort darauf, was das OP suchte 🙁

    Siehe: Android: Kann nicht mit Javascript auf WebView arbeiten, auch mit setJavaScriptEnabled (true)

    Page reload (Webview.loadUrl) Ergebnisse in Javascript nicht (vollständig) verarbeitet

    Http://groups.google.com/group/android-developers/browse_thread/thread/9962064ef217a5a7#

    JavaScript funktioniert manchmal nicht in android's Webview

    Android WebView lädt keine JavaScript-Datei, aber Android-Browser lädt es gut

    Android's Webview kann nicht mit Javascript umgehen?

    Vorschläge? Lass uns auf den Grund kommen! Die Android-Dokumentation sagt, dass das Webview Einschränkungen hat, aber ich weiß nicht, wo das Limit ist, da die Leute HTML CSS JS Apps immer machen!

  • Installieren Sie Apps schweigend, mit der Berechtigung INSTALL_PACKAGES
  • Wie benutzt man Delete Intent, um eine Aktion auf eine klare Benachrichtigung durchzuführen?
  • Google Cloud Messaging - Nachrichten entweder sofort oder mit langer Verzögerung empfangen
  • Ich kann kein Projekt nach dem Aktualisieren von Android Studio auf v2.3 laden
  • Tastatur ausblenden beim Anzeigen von DialogFragment auf Tablet?
  • Android GPS Aktivieren / Deaktivieren Zeit speichern In einer Textdatei Innerhalb SDCARD mit Multilple Linien
  • 4 Solutions collect form web for “Android Webview SKIPS Javascript auch mit setJavascriptEnabled (true) und WebChromeClient”

    Ich habe auch Samsung Galaxy Tab und Android 3.0 mit jQuery Javascript Webseite und es funktioniert. Seien Sie sicher, dass Ihre Seite im Crome-Browser arbeitet und dass Sie keine Javascript-Fehler haben. Es gibt Probleme mit einigen CSS3 Styling (zB Bilder verschwinden), aber jQuery sollte funktionieren. Wenn Sie versuchen, mit Javascript zu kommunizieren, ist sicher, dass Sie es tun, nachdem die Seite geladen ist. Sei auch alle Dateien im richtigen Verzeichnis :). Auch manchmal wird der Inhalt zwischengespeichert, also versuchen sie zu löschen (oder die App zu löschen).

    Bitte geben Sie den Quellcode Ihrer Webseite an, damit wir überprüfen können.

    Beispiel webview:

     webView = (WebView) findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setPluginsEnabled(true); webSettings.setLoadsImagesAutomatically(true); webSettings.setSupportZoom(false); webView.setScrollBarStyle(WebView.SCROLLBARS_INSIDE_OVERLAY); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { // page loaded... super.onPageFinished(view, url); } }); webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message,JsResult result) { Log.e("alert triggered", message); return false; } }); webView.loadUrl("http://mypage/mypage.html"); 

    Ich hoffe, es hilft.

    UPDATE1: Ich habe deinen Code auf der Registerkarte Samsung Galaxy getestet. ich habe mich verändert

     <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script> 

    Linie. Die Seite ist geladen, ich kann den Inhalt mit Bild sehen. Also … der Code funktioniert wie erwartet. Ich habe bemerkt, dass manchmal der Inhalt nicht angezeigt wird, wie es sein sollte. Es näht, dass das Zoomen das Problem ist:

     <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, user-scalable=no" /> 

    Und die Berechnung in $ (document) .ready () ist falsch!

    Btw … was Sie suchen, ist der ViewPager mit WebViews.

    UPDATE2: Beachten Sie auch beim Laden der Webseite als Datei: /// Sie müssen JS-Dateien im selben Verzeichnis haben (keine externen URLs).

    Die Antwort ist, dass das Javascript in den Funktionen innerhalb der HTML-Seite <script> Abschnitte sein muss und dann mit webview.loadUrl("javascript:yourJavascriptFunction()") after webview.setWebviewClient(new WebviewClient(){ public void onPageFinishedLoading(){ ...//js injections here }); injiziert werden webview.loadUrl("javascript:yourJavascriptFunction()") after webview.setWebviewClient(new WebviewClient(){ public void onPageFinishedLoading(){ ...//js injections here });

    Ich habe das gleiche Problem schon vor einiger Zeit angetroffen – meine letzte Lösung war es, jquery zu graben und einfach nur einfaches JS zu benutzen. Die Dinge wurden ständig brechen, während sie gut funktionierten, wenn sie vom normalen Android-Browser aus gesehen wurden.

    Wenn diese die einzigen Zeilen sind, die den Code brechen, versuchen Sie, die gleiche Funktionalität dieser Zeilen mit reinem JS zu reproduzieren. Die Android native Webview hat eine ziemlich gute Unterstützung für alle neuesten JS Goodies,

    damit…

     $('body').css({height : height+'px', width : Math.floor(width*0.98)+'px' }); $('.text').css({height : height+'px', width : Math.floor(width*0.98)+'px' }); $('#firstpage').css({height : height+'px', width : Math.floor(width*0.98)+'px' }); $('body').prepend('<style>.text{-moz-column-count:'+numCols+';-webkit-column-count:'+numCols+';}</style>'); 

    wäre…

     var doc = document, body = doc.getElementsByTagName('body')[0], bodyStyle = body.style, firstPage = doc.getElementById('firstpage'), firstPageStyle = firstPage.style, head = doc.getElementsByTagName('head')[0], style = doc.createElement('style'), rules = doc.createTextNode('.text{-webkit-column-count:'+numCols+';}'); bodyStyle.height = height + 'px'; bodyStyle.width = Math.floor(width * 0.98) + 'px'; firstPageStyle.height = height + 'px'; bodyStyle.width = Math.floor(width * 0.98) + 'px'; style.type = 'text/css'; if( style.styleSheet ) style.styleSheet.cssText = rules.nodeValue; else style.appendChild( rules ); head.appendChild( style ); 

    Stellen Sie einfach sicher, dass der oben genannte Code läuft, nachdem alle verwendeten Elemente geladen wurden (nach DOM-Bereitschaftszustand oder vor dem Schließen des Tags)

    Ps Auch da du Android-Webkit nimmst – warum gibt es für -moz-column-count?

    Ich bin nicht ganz sicher, ob dies die Ursache für Ihr Problem ist, aber Sie sollten loadUrl nach dem Einrichten der WebView

    Bearbeiten

    Wenn dies nicht das Problem ist, können Sie prüfen, Posting

    • Die einfachste SSCCE , die Sie finden, funktioniert nicht aber was Sie fühlen sollten
    • Das make / model Ihres Gerätes und die Version von Android, mit dem du arbeitest
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.