Проблемы с загрузкой mobile.twitter в webview
Когда я пытаюсь загрузить следующие URL-адреса в Webview, все, что я получаю, это черный фон щебета с загрузкой. Страница загружается, когда вызывается WebViewClient.onPageFinished
. Однако страница загружается нормально в стандартном браузере Android.
https://twitter.com/#!/scottyab or https://mobile.twitter.com/#!/scottyab
Я думаю, что Twitter изменил свой мобильный сайт, так как это работало месяц назад. Кто-нибудь еще испытывает это?
Обновлено: включен javascript mWebView.getSettings().setJavaScriptEnabled(true);
Ответы
Ответ 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) {}