Подтвердить что ты не робот

Проблемы с загрузкой mobile.twitter в webview

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

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

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

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

4b9b3361

Ответ 1

Исправлена ​​проблема с загрузкой путем жесткого кодирования пользовательского агента для пользовательского агента 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");

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

Ответ 2

Это действительно грязные хаки. Изменение User Agent действительно является отвратительным решением и должно выполняться никогда. Когда вы загружаете twitter.com в веб-просмотр, вам лучше попробовать кусок кода: fooobar.com/questions/206864/...

Для ленивых кликеров я приведу его здесь:

webView.getSettings().setDomStorageEnabled(true);

Все кредиты переданы gregm, кто дал этот:)

Счастливое кодирование!

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

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

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

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

Ответ 3

Чуть менее грязный, чем использование пользовательского агента 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" на странице.

Ответ 4

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

// 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) {}