Javascript console.log() на устройствах HTC Android и adb logcat
Я разрабатываю приложение в HTML, которое вызывает console.log()
из Javascript, чтобы предоставить мне журналы во время разработки о том, что происходит в коде веб-страницы.
К сожалению, когда я использую команду adb logcat
для проверки журналов, я могу видеть вывод из всех других приложений, но не вывод из моего кода JavaScript. Я вижу даже журнал из веб-браузера, что страница загружена, но не console.log()
вывод из моего кода JavaScript, выполняемого в веб-браузере.
Согласно информации эта страница (http://developer.android.com/guide/webapps/debugging.html), он должен работать.
Я тестирую HTC WildFire и HTC Desire HD.
Отредактировано более 6 месяцев
После некоторого времени и опыта работы с различными устройствами (телефоны, телевизоры, телевизионные приставки, WebViews, UIWebViews...) мой совет - сделать удаленную регистрацию из JavaScript и не полагаться на console.log() или другие методы - см. хороший трюк с загрузкой изображения здесь.
Не пропустите презентацию здесь
Надеюсь это поможет!
Стен
Ответы
Ответ 1
В браузере по умолчанию на Android 2.3.3 (и предположительно с этого момента) вы можете просто использовать встроенную консоль javascript:
- откройте браузер
- перейдите на веб-страницу
- введите
about:debug
в адресную строку и нажмите enter
- вы увидите раздел для параметров отладки, если вы перейдете в настройки браузера.
- отметьте "Показать консоль JavaScript", если она еще не включена.
- обновите свою веб-страницу.
В верхней части вы увидите панель с надписью "Консоль JavaScript".
Ответ 2
Я использую три разных телефона HTC, почти исключительно, и у меня никогда не было этой проблемы. Вот несколько вещей, которые нужно проверить:
- Убедитесь, что отладка USB включена.
- Убедитесь, что в Webview установлен набор WebChromeClient. Браузер, используемый в Webview, не реализует console.log().
- Должно быть легко увидеть результат работы adb logcat, но чтобы упростить его, отфильтруйте вывод.
Включить отладку USB:
- Отключите устройство от компьютера.
- Перейдите в Настройки → Приложения → Разработка → Выберите "Включить отладку USB"
- Плагин для компьютера. (Убедитесь, что у вас установлены правильные драйверы для использования ADB - подробнее здесь: http://developer.android.com/guide/developing/device.html)
Установите WebChromeClient, который переопределяет onConsoleMessage():
//Set the output prefix so you can filter adb logcat results later
public static final String TAG = "Your-Application-Name";
myWebView = (WebView) findViewById(R.id.webview);
//Not going to have much luck running JS without this:
myWebView.getSettings().setJavaScriptEnabled(true);
//Override onConsoleMessage() to output to the Log.
myWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d(TAG, cm.message() + " -- From line "
+ cm.lineNumber() + " of "
+ cm.sourceId() );
return true;
}
});
Дополнительная информация о onConsoleMessage() здесь: http://developer.android.com/reference/android/webkit/WebChromeClient.html#onConsoleMessage(java.lang.String, int, java.lang.String)
Дополнительная информация об отладке в целом здесь: http://developer.android.com/guide/webapps/debugging.html
Отфильтровать вывод лог файла adb:
adb logcat tag-name:log-level *:S
tag-name соответствует строке, указанной в Log.x
log-level соответствует уровню журнала, который вы указали при вызове Log.x < ---
Пример, связанный с приведенным выше кодом:
adb logcat Your-Application-Name:D *:S
Это покажет все журналы уровня d для соответствующего тега, Your-Application-Name и все молчание.
Подробнее о фильтрации adb здесь:
http://developer.android.com/guide/developing/tools/adb.html#logcat
Надеюсь, это поможет! Я знаю, что это было немного обобщение других ответов, но, на самом деле, все шаги предпринимаются, чтобы заставить его работать.:)
Ответ 3
У меня была та же проблема, я решаю ее, выполняя следующие действия:
1/когда вы инициализируете свой веб-просмотр, добавьте класс моста javascript:
appView.addJavascriptInterface(new JSBridge(), "JSBridge");
2/создайте класс JSBridge с функцией журнала
class JSBridge {
public void log(String msg){
Log.d(msg);
}
}
3/в вашем javascript вы теперь можете позвонить
JSBridge.log("my log message");
Возможно, это будет слишком сложно для вашей проблемы, но вы также можете сделать LOT больше с этим решением
Ответ 4
Logcat генерирует много вещей на устройствах в дополнение к вашим, поэтому вам может потребоваться отфильтровать это.
Вы можете попытаться "grep" сделать вывод журнала, если вы отметили его.
Например: согласно вашей статье вывод должен выглядеть так:
Console: Hello World http://www.example.com/hello.html :82
Если вы используете команду (если вы используете Linux, Mac OS или что-то еще с командой grep)
adb logcat | grep -i "console"
он уменьшит вывод до ключевого слова, указанного в этих кавычках. Если вы добавите уникальный тег в свой вывод, вы также можете отфильтровать его, чтобы получить только то, что вы хотите видеть.
[ctrl]+c
остановит этот процесс logcat.
Ответ 5
Смотрите: Как отобразить вывод console.log() в приложении PhoneGap с использованием Eclipse и HTC Desire HD?
Кажется, что console.log отключен на устройствах HTC, работающих под управлением Android 2.2.
Вы можете обойти его, используя удаленная отладка в jsconsole.com.
Ответ 6
Попробуйте следующее:
1) Откройте вкладку "Устройства" и убедитесь, что выбранное вами устройство выделено/выделено.
2) Убедитесь, что на вашем устройстве включена USB-отладка. Вот что вам нужно сделать для этого:
2a) На главном экране нажмите MENU, а затем нажмите "Настройки" > "Приложения" > "Разработка".
2b) Убедитесь, что установлен флажок USB debugging.