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

8

(mit Samsung Galaxy Tab und Android 3.0, das soll auf jedem Tablet ab 3.0+ funktionieren, wie in ihren Browsern, nur nicht im Webview)

Ich habe eine Seite mit CSS und jQuery, die gut in Browsern, Android-Browsern und iOS-Geräten geladen wird, aber Android-Webview weigert sich, es konsistent zu laden.

Ich habe das Problem darauf beschränkt, einfach Javascript beim Laden zu überspringen (indem ich das Problem mit einigen JavaScript-Demo-Apps von webview repliziere). Warum ist das?

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

und so nenne ich es:

%Vor%

Die Reihenfolge dieser drei Aufrufe hat keinen Einfluss auf das Ergebnis.

%Vor%

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 konsistent geladen. Dies führte mich zu einigen weit hergeholten Versuchen, die App langsamer zu laden, aber das ist wirklich nicht die gewünschte Benutzererfahrung. Ich hoffe wirklich, dass Android-Webview wirklich nicht der IE6 der mobilen Entwicklung ist.

Zusätzliche Fakten:

Wenn Sie die <script> -Tags entfernen, die die gesamte Jquery enthalten, wird die Seite schnell mit der gesamten CSS-Formatierung geladen. Sobald die Jquery hinzugefügt wird, lädt nichts mehr.

Ich habe auch einige andere Fragen gefunden, die auf das gleiche Problem stoßen, viele bleiben unbeantwortet oder haben keine schlüssige Antwort auf das, was das OP suchte: (

siehe: Android: JavaScript kann nicht bearbeitet werden WebView sogar mit setJavaScriptEnabled (true)

Seiten-Reload (Webview.loadUrl) führt dazu, dass Javascript nicht (vollständig) verarbeitet wird

Ссылка

JavaScript funktioniert manchmal nicht in androids Webview

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

Androids Webview kann nicht mit JavaScript umgehen?

Vorschläge? Lasst uns dem auf den Grund gehen! Die Android-Dokumentation sagt, dass das Webview Einschränkungen hat, aber ich weiß nicht, wo diese Grenze ist, da Leute HTML CSS JS-Apps die ganze Zeit machen!

    
CQM 04.08.2011, 23:55
quelle

4 Antworten

4

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

    
CQM 25.08.2011, 21:59
quelle
4

Ich habe auch Samsung Galaxy Tab und Android 3.0 mit jQuery Javascript Webseite und es funktioniert. Stellen Sie sicher, dass Ihre Seite im Crome-Browser funktioniert und Sie keine JavaScript-Fehler haben. Es gibt bekannte Probleme mit CSS3-Stilen (z. B. Bilder verschwinden), aber jQuery sollte funktionieren. Wenn Sie versuchen, mit Javascript zu kommunizieren, stellen Sie sicher, dass Sie es nach dem Laden der Seite tun. Sicher sein, auch alle Dateien sind im richtigen Verzeichnis :). Manchmal wird der Inhalt zwischengespeichert, also versuchen Sie ihn zu löschen (oder löschen Sie die App).

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

Beispiel für eine Webansicht:

%Vor%

Ich hoffe, es hilft.

UPDATE1: Ich habe Ihren Code auf dem Samsung Galaxy Tab getestet. Ich änderte

%Vor%

Linie. Die Seite ist geladen, ich kann den Inhalt mit Bild sehen. Also ... der Code funktioniert wie erwartet. Ich habe festgestellt, dass der Inhalt manchmal nicht so angezeigt wird, wie er sein sollte. Es scheint, dass das Zoomen das Problem ist:

%Vor%

und die Berechnung in $ (Dokument) .ready () ist falsch!

Btw ... Was Sie suchen, ist der ViewPager mit WebViews.

UPDATE2: Beachten Sie auch beim Laden von Webseiten als Datei: /// JS-Dateien im gleichen Verzeichnis (keine externen URLs).

    
xpepermint 14.08.2011 17:57
quelle
2

Ich hatte schon vor einiger Zeit das gleiche Problem - meine letzte Lösung bestand darin, jQuery abzuzweigen und einfach nur JS zu verwenden. Die Dinge brachen ständig, während sie vom normalen Android-Browser aus gut funktionierten.

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

so ...

%Vor%

wäre ...

%Vor%

Stellen Sie nur sicher, dass der obige Code ausgeführt wird, nachdem alle verwendeten Elemente geladen wurden (nach dem DOM-Status oder vor dem Schließen des Tags)

ps. Da Sie das Webkit von Android verwenden, warum brauchen Sie dann -moz-column-count?

    
Pantelis 17.08.2011 00:37
quelle
1

Ich bin mir nicht ganz sicher, ob dies die Ursache Ihres Problems ist, aber Sie sollten loadUrl aufrufen, nachdem Sie WebView

eingerichtet haben

Bearbeiten

Wenn dies nicht das Problem ist, könnten Sie in Erwägung ziehen,

zu posten
  • das einfachste SSCCE , das Sie finden, funktioniert nicht, aber Sie sollten es tun
  • die Marke / das Modell Ihres Geräts und die Version von Android, mit der Sie arbeiten
no.good.at.coding 13.08.2011 00:54
quelle