11 Stimmen

Probleme beim Laden von mobile.twitter in Webansicht

Wenn ich versuche, die folgenden URLs in einem Webview zu laden, erhalte ich nur einen schwarzen Twitter-Hintergrund mit Ladespinner. Die Seite wird geladen, da WebViewClient.onPageFinished aufgerufen wird. Die Seite lädt jedoch im Standard-Android-Browser ordnungsgemäß.

https://twitter.com/#!/scottyab oder https://mobile.twitter.com/#!/scottyab

Ich denke, Twitter hat ihre mobile Website geändert, da dies vor etwa einem Monat funktioniert hat. Hat jemand anderes das gleiche Problem?

Update: JavaScript aktiviert mWebView.getSettings().setJavaScriptEnabled(true);

19voto

MrBuBBLs Punkte 462

Diese sind in der Tat schmutzige Hacks. Das Ändern des Benutzer-Agenten ist wirklich eine schreckliche Lösung und sollte niemals gemacht werden. Wenn Sie twitter.com in einem Webview laden, sollten Sie besser den dort gegebenen Code ausprobieren: https://stackoverflow.com/a/6625418/162178

Für faule Klicker gebe ich es hier:

webView.getSettings().setDomStorageEnabled(true);

Alle Credits gehen an gregm, der diesen Code gegeben hat :)

Frohes Coden!

Bearbeiten: Nur ein kleines Update, um diese Wahl zu rechtfertigen, Benutzer-Agenten sollen der besuchten Website die Informationen darüber geben, wer der Client ist. Wenn Twitter eines Tages spezielle Änderungen für Android macht, werden sie definitiv den Benutzer-Agenten verwenden, um das zu erreichen. Wenn Sie ihnen sagen, dass Sie ein iPhone oder was auch immer sind, werden Sie vielleicht nie umgeleitet oder ganz einfach nie den CSS erhalten, der speziell für Android gedacht ist.

Und in politischerer Hinsicht, wenn jeder seinen Benutzer-Agenten ändert, werden die Website-Statistiken falsch sein und sie werden vielleicht nie sehen, dass viele Android-Geräte ihre Website besuchen. ^^ (Um vielleicht die richtigen Updates für ihre Website in Betracht zu ziehen). Und das betrifft nicht nur Twitter-Webclients. Also sei nett.

Benjamins Antworten hier scheinen auch gut zu sein (Verwendung von Javas Reflection, um es abwärtskompatibel zu machen, wenn ich richtig liege)

Also ändern Sie den Benutzer-Agenten wieder nicht, das ist sehr schädlich für Ihre App und die Web-Gesundheit. Und sollte einfach aus jedem Code da draußen verbannt werden. Danke :)

16voto

scottyab Punkte 22856

Problem mit dem Laden behoben, indem der Benutzer-Agent auf den Benutzer-Agent des iPhones fest codiert wurde (ich fand heraus, dass es in der iPhone-Version der App funktioniert hat)

mWebView.getSettings().setUserAgentString("Mozilla/5.0 (iPhone; U; CPU like Mac OS X; de) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3");

Muss mir nach diesem schmutzigen Hack die Hände waschen.

14voto

chuckbjones Punkte 374

Etwas weniger schmutzig als die Verwendung des iPhone-Benutzer-Agenten konnte ich dies mit der Benutzer-Agent-Zeichenfolge des OG Droid zum Laufen bringen:

webView.getSettings().setUserAgentString("Mozilla/5.0 (Linux; U; Android 2.0; en-us; Droid Build/ESD20) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17");

Auf diese Weise erhalten Sie keine iPhone-spezifischen Texte wie "Laden Sie die neue Twitter-App für das iPhone herunter" auf der Seite.

2voto

Benjamin Piette Punkte 3495

Nach der Antwort von MrBUBBL sollte so etwas ausreichen, um die Abwärtskompatibilität zu verwalten und das Twitter-Problem zu lösen:

// Hack, um mobiles Twitter zum Laufen zu bringen. Ab API 7 (Android 2.1) nur
try {
    Method m = WebSettings.class.getMethod("setDomStorageEnabled", new Class[]{boolean.class});
    m.invoke(mWebView.getSettings(), true);
} 
catch (SecurityException e) {} 
catch (NoSuchMethodException e) {} 
catch (IllegalArgumentException e) {} 
catch (IllegalAccessException e) {} 
catch (InvocationTargetException e) {}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X