2012-06-08 14 views
14

Gibt es ein besseres Webview für Android? Google-eigene Dokumente erwähnen, sich nicht auf das Webview-Objekt zu verlassen.Gibt es ein besseres Webview für Android

Aber für die Verwendung von Webkit scheint es seltsam, dass es im Vergleich zu anderen Webkit-Browsern, die auf mobilen Geräten mit vergleichbarer Hardware verwendet werden, so begrenzt ist.

Dies ist in jQuery Mobile-Implementierungen oder ähnlich Sencha Touch-Implementierungen für Web-Anwendungen offensichtlich. Die Android-Version leidet an Verlangsamungen, Renderproblemen und einer schlechten Benutzererfahrung, wo andere mobile Geräte - wie ein iPhone - gut funktionieren. Beide benutzen Webkit. und außerhalb einer App läuft der eigentliche Android-Browser problemlos.

Gibt es eine Möglichkeit, Android-Problem auf einer niedrigeren Ebene wirklich zu behandeln? Hat jemand ein umfassenderes Web-Objekt für Android erstellt?

Vielen Dank für jede Einsicht

Antwort

6

Ich fürchte, dass beide Antworten (Commonsware und Fuzzical Logic), um die Realität zu vermeiden.

Die Realität unserer zweijährigen Erfahrung von HTML5-Web-App zu entwickeln und später PhoneGap app (Hybrid Web-Ansicht verwendet wird) für iOS, Android und Windows Phone ist:

auf iOS großen Werke (beide Safari und in WebView), funktioniert in Chrome auf Android, IE unter Windows 8 und IE WebView (alle hatten Probleme, können aber gelöst werden) bleibt aber ein Albtraum im Android WebView.

Die WebView in Android wurde gebrochen und ist immer noch nach dem Update auf KitKat gebrochen mit Chromium ersetzt es. Es stürzt einfach auf normalem HTML5 ab (nicht einmal zu Javascript-Problemen). Sie werden finden viel von Menschen im Netz beobachten ähnliche Dinge.

Dinge wie "Flash-Unterstützung" hat nichts damit zu tun - Flash dies ist nicht HTML5. Ob ein Hersteller ein bestimmtes Plugin (oder in diesem Fall eine ganze Middleware) unterstützen möchte, liegt bei ihm. Ich habe Apples Entscheidung immer verstanden und in einem WebView macht es noch weniger Sinn.

Also, das Problem ist ein Android/Google Problem, so sehr wie die Anhänger dieser Plattform es leugnen wollen. Besonders peinlich ist es natürlich für ein Unternehmen, das immer "offen" geweint hat und nach so vielen Jahren keine funktionierende HTML5-Browser-Komponente mehr liefern kann.

Aber Ihre Frage war, ob es eine andere WebView von jemand anderes ist:

Nun, wir man zu hören, würde lieben. Leider haben wir bis jetzt noch keinen gefunden, und der Grund ist wahrscheinlich genau das, was in den obigen Posts erwähnt wurde: Es ist sehr schwierig es zu implementieren und es wird Hardware-abhängig sein (Hardwarebeschleunigung etc.). Da Chrome aber jetzt (nach so vielen Jahren) zumindest einigermaßen vernünftig funktioniert ... frage ich mich, ob der Mangel an ähnlicher Qualität in der Chromium WebView von Google beabsichtigt ist und versucht, die Leute davon abzuhalten, großartige Web-Apps oder hybride Apps zu erstellen. (Ziemlich das Gegenteil von dem, was Microsoft tut.)

+0

Sie haben Recht. Aber welche Lösung haben Sie für dieses Problem gefunden? Gibt es einen guten Ersatz für WebView? –

0

Dieser verdammt nah an ein Off-Thema ist, senden-your-Geschimpfe-anderswo bitte Art "Frage".

Gibt es ein besseres Webview für Android?

Wenn von „Webansicht“ bedeuten Sie eine integrierbare Web-Rendering-Engine, wahrscheinlich nicht, da solche Motoren zu schreiben hart ist. Sie können sehen, ob einer als Ableger von Firefox Mobile verfügbar ist. Oder Sie können Ihren eigenen Port von WebKit für Android erstellen, indem Sie die AOSP-Edition als Ausgangspunkt verwenden. Beachten Sie, dass beide die Größe Ihrer App wahrscheinlich erheblich vergrößern werden.

Googles eigene Dokumente erwähnen, sich nicht auf das Webview-Objekt zu verlassen.

Zitat bitte.

Hat jemand ein umfassenderes Web-Objekt für Android erstellt?

Das würde von der Definition von "umfassender Web-Objekt" abhängen. Bemerkenswerterweise haben Sie es versäumt, irgendeine Definition für diesen Ausdruck zu liefern.

+3

Ich werde diese Informationen in Abschnitten im Laufe der Zeit adressieren, aber die Leute haben bessere Listenansichten, bessere asynchrone Threading und insgesamt Problemlösungsbeiträge zur Android-Code-Basis, wie Sie bereits wissen.Dies ist eine Frage über das Webview-Objekt, um festzustellen, ob es von jemandem neu erstellt oder erweitert wurde, um die tatsächlichen Probleme des Webview-Objekts zu beheben. – CQM

+2

@CQM: 'WebView' selbst basiert auf einer Tonne nativem Code, was unsere Flexibilität für Änderungen einschränkt. Alles andere, was Sie genannt haben, ist rein in Java implementiert. – CommonsWare

+1

@CoderSeven Vielleicht schrecklich für Ihr Können, aber das sind ergreifende und informative Antworten für jemanden, der eine Weile mit der Plattform gearbeitet hat und nicht ihre Hand halten muss. –

14

CQM,

Verstehen Sie, dass ich mit Commonswares und fast alles stimmen, die in der mitgelieferten Antwort angegeben. Die Frage scheint jedoch zu implizieren, dass es ein Problem gibt, das Sie haben (entweder im Verständnis oder in der Konzeption) und eine adäquate Lösung für Ihre Bedürfnisse finden/entwickeln möchten.

die Frage und die Antworten Adressieren Sie wahrscheinlich erhalten werden:

glaube ich Commonswares gültig Kritik ist aufgrund der Tatsache, dass Sie nicht Sie angeben warum oder wie das angegebene Plattformobjekt ist unbefriedigend, noch geben Sie warum oder wenn Sie glauben, dass Google gesagt hat, dass das Objekt unzuverlässig ist. Wenn Sie ein besseres Feedback wünschen, bearbeiten Sie Ihre Frage entsprechend, um dies zu kommunizieren, und Sie werden weniger Probleme haben.

Weiter, wie weiter unten erläutert, implizieren Sie, dass dies ein Problem mit der Android-Plattform ist (in der Tat, fast direkt angeben) und es ist nicht. Es gibt zu viele Überlegungen in dem weiten Bereich des Web-Browsings, die vollständig durch eine einfache Steuerung wie das WebView adressiert werden. Microsoft hatte das gleiche Problem mit ihrem eingebetteten IE-COM-Objekt in den 90er Jahren. Es ist ein großes Thema, das keiner Gruppe angehört.

die implizite Frage Adressierung:

Das WebView Objekt ist im Grunde ein Mini-Browser hochflexible Rendering-Code basiert auf völlig unterschiedlichen Parametern von dem eines dedizierten Browser verwendet wird. Dies umfasst alles von einfachem Rendering bis hin zu interaktivierbaren (sp?) Objekten wie den Links, die eine solche Seite verwenden würde. Dieser Prozess ist (aus Mangel an einem besseren Wort) sehr schwer zu miniaturisieren in der Weise, dass die Fähigkeit für die Einbettung in eine Vielzahl von Apps, die eine unterschiedliche Layout-Struktur und Parameter jedes Mal haben können, einheitlich ist. Verdammt, solche Engines sind selbst mit einer dedizierten Browser-Engine schwer einheitlich zu programmieren, was zu vielen Unterschieden zwischen den aktuellen Haupt-Browsern als Ganzes führt.

Als solche ist die WebView nicht dazu gedacht, die volle Funktionalität eines dedizierten Browsers zu bieten, sondern die nützlichsten Aspekte der Anzeige von Web-Inhalten innerhalb einer Anwendung, die oft andere Dinge tut. Dies gilt insbesondere dann, wenn Sie die Sicherheitsimplikationen des Hinzufügens von JavaScript-Funktionalität oder der clientbasierten Verarbeitung berücksichtigen, die von diesem Inhalt geliefert wird. Hinzu kommt, dass jedes Gerät die Möglichkeit hat, eine andere Rendering-Engine oder eine andere Version derselben Rendering-Engine zu verwenden, ähnlich wie verschiedene Geräte unterschiedliche Funktionen mit SQLite verwenden (z. B. Fremdschlüsselunterstützung).

Als solches wird die WebView als Lösung bereitgestellt Webinhalte ohne Gewähr für seine Erweiterbarkeit oder Verwendbarkeit geliefert anzuzeigen es sei denn Sie es verwenden rein anzusehen (und reagieren möglicherweise) vertraut und Standards konformes HTML-Code. Sobald Sie sich mit den tatsächlichen Praktiken von realen Websites beschäftigen, stellen Sie fest, dass HTML so flexibel gemacht wurde, weil jeder Standard auf verschiedenen Ebenen von verschiedenen Entwicklern eingehalten wurde. Da das primäre Credo von HTML darin besteht, dass es trotz möglicher Unklarheiten funktioniert (Inhalte zeigen), wird es noch schwieriger, das Problem der Entwicklung einer vollständigen objektorientierten App-eingebetteten Lösung zu entwickeln.

... wo andere mobile Geräte - wie ein iPhone - es fein

Dies ist abhängig vom Inhalt ausgeführt werden.Auch die Entwicklungsphilosophie für die Apple-Geräte unterscheidet sich vollständig von der von Android. Apple hat nur eine Handvoll Geräte, so dass sie die Einheitlichkeit ihrer Geräte garantieren und entscheiden können, wann und wo sie zusätzliche Funktionen hinzufügen möchten. Zum Beispiel hatte das erste iPhone keine native Unterstützung für Flash. Aufgrund der Implikationen Ihrer Frage glaube ich, dass dies den "umfassenden" Test nicht besteht.

Android, im Gegensatz, hat ein viel breiteres Repertoire von Geräten. Der Code für Android wird von den Herstellern dieser Geräte angepasst und geändert, damit sie adäquatere unterstützbare Lösungen für ihre spezifischen Geräteanforderungen erstellen können. Google kann nicht garantieren, dass ein bestimmtes Gerät seinen Code in irgendeiner Weise gleich macht. Dies schafft weitere Einschränkungen, schafft aber andere sehr ehrliche Freiheiten.

... beide verwenden webkit.

Chrome und Safari verwenden beide auch webkit. Viele Entwickler sind von den sogar winzigen Unterschieden in der Art und Weise geplagt worden, in der sie beide unterschiedlich verwenden.

... außerhalb einer App, läuft der eigentliche Android-Browser problemlos.

Dies wird oben angesprochen.

Gibt es eine Möglichkeit, Android-Problem auf einer niedrigeren Ebene wirklich zu behandeln?

Auch dies ist nicht android Problem. Wenn Sie ein spezifisches Problem mit der aktuellen Implementierung haben, können Sie eine separate Lösung programmieren. Darüber hinaus wurde Web-Content erstellt, um in einem Browser angezeigt zu werden, und das wird bereitgestellt. Die beste Vorgehensweise besteht darin, festzulegen, was genau Sie tun müssen. Benötigen Sie die WebView, um irgendeine Webseite zu sehen? Oder nur deins? Was sind Ihre Probleme mit dem aktuellen Rendering? Benötigen Sie clientseitige Skripte?

Jedes Werkzeug wurde mit besonderen Anforderungen entwickelt. Dies gilt sogar für die sogenannten "besseren" Listenansichten. Diese Ansichten wurden erstellt, um auf spezifische Bedürfnisse einzugehen, die von mehr als einem Entwickler benötigt werden. In der Welt der Programmierung (vor allem OOP) gibt es wirklich sehr wenig so etwas wie umfassend. Gäbe es das, müssten wir unsere Objekte nicht erst erweitern. Wenn Sie sich ein solches Tool ansehen, überlegen Sie, was es speziell zu erreichen versucht.

Hat jemand ein umfassenderes Web-Objekt für Android erstellt?

Ja. Sie werden normalerweise in den anderen dedizierten Browsern manifestiert, die Sie auf Ihr Gerät herunterladen können. Ob sie zugänglich sind oder nicht: Persönlich habe ich keine Ahnung und bin nicht geneigt zu schauen.

Abschlusserklärung

Die Frage, die Sie angesprochen haben war wirklich nicht spezifisch genug, um eine echte Lösung zu bieten. Es schien auch aufgrund der schlechten Wortwahl eine antagonistische Haltung einzunehmen. Wenn Ihr Problem weder durch die Antwort von CommonsWare noch durch meine eigene gelöst wurde, können Sie Ihre Frage bearbeiten, um unsere spezifischen Bedürfnisse hinzuzufügen. Das heißt, ich hoffe, dass beide Antworten Ihnen einen Einblick geben konnten.

hoffe, das hilft,

FuzzicalLogic

+2

Dies ist bei weitem die beste Erklärung der Android-Webansicht und die Gründe für Diskrepanzen, auch zwischen verschiedenen Android-Herstellern. Danke dafür! –

1

Ich bin überrascht niemand erwähnte CocoonJS.

Es hat eine Neuimplementierung des Standard-WebView (Webview +); ein verpacktes Webview, so dass Ihre App einheitlich auf allen Geräten läuft (wenn auch auf Android 4+ und iOS 8+ beschränkt).

Es gibt auch eine Umgebung namens Canvas + für WebGL, die jedoch vollständig von WebView + getrennt ist. Das bedeutet, dass Sie WebView + über Canvas + überlagern müssen, um DOM und Canvas gleichzeitig anzuzeigen. Sie teilen nicht die gleiche JS-Umgebung, aber es gibt ein Nachrichtensystem zum Senden von Nachrichten zwischen den beiden.

CocoonJS scheint wegen der eingeschränkten Betriebssystemunterstützung keine gute Lösung auf Produktionsebene zu sein, aber vielleicht wird es in Zukunft so sein.

Es gibt auch Crosswalk. Es funktioniert für Android 4+ und Tizen.

+0

Niemand hat es erwähnt, weil diese Frage 3 Jahre vor Ihrer Antwort gepostet wurde. Danke, dass du es jetzt aufgezeigt hast – CQM

Verwandte Themen