Проблемы с загрузкой mobile.twitter в webview - PullRequest
11 голосов
/ 28 июля 2011

Когда я пытаюсь загрузить следующие URL-адреса в Webview, все, что я получаю, это черный твиттерный фон с загрузкой блесны. Страница загружается, так как WebViewClient.onPageFinished вызывается. Однако страница загружается нормально в стандартном браузере Android.

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

Я думаю, что Твиттер изменил свой мобильный веб-сайт, так как это сработало около месяца назад. Кто-нибудь еще испытывает это?

Обновлено: JavaScript включен mWebView.getSettings().setJavaScriptEnabled(true);

Ответы [ 4 ]

19 голосов
/ 20 декабря 2011

Это действительно грязные хаки. Смена User Agent - это действительно неприятное решение, и никогда не нужно делать. Загружая twitter.com в веб-браузере, вам лучше попробовать приведенный там фрагмент кода: https://stackoverflow.com/a/6625418/162178

Для ленивых кликеров я дам здесь:

webView.getSettings().setDomStorageEnabled(true);

Все кредиты идут Грегму, который дал этот:)

Удачного кодирования!

Редактировать: Просто небольшое обновление, чтобы оправдать этот выбор, пользовательский агент предназначен для того, чтобы предоставить посещенному сайту информацию о том, кто является клиентом. Если в один прекрасный день Twitter внесет специальные изменения, посвященные Android, они обязательно будут использовать User Agent для этого. Если вы скажете им, что у вас iPhone или что-то еще, что вы можете никогда не перенаправить, или, проще говоря, никогда не получите CSS, предназначенный специально для Android.

И в более политическом плане, если все поменяют свой пользовательский агент, статистика сайта будет неправильной, и они могут никогда не увидеть, что на их сайт заходит множество Android. ^^ (Чтобы, возможно, рассмотреть вопрос о привлечении соответствующих обновлений на их сайте). И все это не только для веб-клиентов Twitter. Так что будь милым.

ответы Бенджамина здесь , кажется, довольно хорошо (используя Java Reflection, чтобы сделать его обратно совместимым, если я прав)

Опять же, не меняйте User Agent, это очень вредно для вашего приложения и здоровья сети. И должен быть просто запрещен из любого кода там. Спасибо:)

16 голосов
/ 28 июля 2011

Исправлена ​​проблема с загрузкой путем жесткого кодирования пользовательского агента к пользовательскому агенту iPhone (я обнаружил, что это работает в версии приложения для iPhone)

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

Нужно мыть руки после этого грязного хака.

14 голосов
/ 09 сентября 2011

Чуть менее грязно, чем с помощью пользовательского агента iPhone, я смог заставить это работать, используя строку пользовательского агента OG Droid:

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

Таким образом, на странице вы не получите специфический для iPhone текст, такой как «Загрузить новое приложение Twitter для iPhone».

2 голосов
/ 07 мая 2012

После ответа MrBUBBL что-то подобное должно сделать это для управления обратной совместимостью при решении проблемы с твиттером:

// Hack to let mobile twitter work. From API 7 (Android 2.1) only
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) {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...