Javascript console.log () на устройствах HTC Android и adb logcat - PullRequest
25 голосов
/ 04 апреля 2011

Я разрабатываю приложение на 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 () или другие методы - посмотрите хороший трюк с загрузкой изображения здесь .

Непропустите презентацию здесь Надеюсь, это поможет! STeN

Ответы [ 6 ]

29 голосов
/ 17 июля 2011

В браузере по умолчанию на Android 2.3.3 (и, вероятно, с этого момента) вы можете просто использовать встроенную консоль JavaScript:

  • открыть браузер
  • перейти кwebpage
  • введите about:debug в адресной строке и нажмите ввод
  • , вы увидите раздел для параметров отладки, если вы войдете в настройки браузера
  • tick "Показать консоль JavaScript ", если она еще не включена
  • обновить веб-страницу

Вверху вы увидите панель с надписью" Консоль JavaScript ".

12 голосов
/ 17 мая 2011

Я использую три разных телефона HTC, почти исключительно, и никогда не сталкивался с этой проблемой. Вот несколько вещей для проверки:

  1. Убедитесь, что отладка по USB включена.
  2. Убедитесь, что у вашего Webview есть набор WebChromeClient. Браузер, используемый в Webview, не поддерживает console.log ().
  3. Должно быть легко увидеть выходные данные adb logcat, но для упрощения отфильтруйте выходные данные.

Включить отладку по USB:

  1. Отключите устройство от компьютера.
  2. Зайдите в Настройки -> Приложения -> Разработка -> Выберите «Включить отладку по USB»
  3. Плагин к компьютеру. (Убедитесь, что у вас установлены правильные драйверы для использования 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 logcat:

adb logcat tag-name:log-level *:S

tag-name соответствует строке, указанной в Log.x уровень журнала соответствует уровню журнала, который вы указали при вызове Log.x <--- </p>

Пример, относящийся к коду выше:

adb logcat Your-Application-Name:D *:S

Это покажет все журналы уровня d для соответствующего тега, Your-Application-Name и отключит все остальное.

Подробнее о фильтрации adb здесь: http://developer.android.com/guide/developing/tools/adb.html#logcat

Надеюсь, это поможет! Я знаю, что это было краткое изложение других ответов, но, на самом деле, для того, чтобы все заработало, нужны все шаги. :)

8 голосов
/ 12 мая 2011

У меня была та же проблема, я решаю ее, выполнив следующие действия:

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

Возможно, это немного излишне для вашей проблемы, но вы также можете сделать намного большес этим решением

4 голосов
/ 05 мая 2011

Logcat генерирует множество вещей на устройствах в дополнение к вашему, так что вам, возможно, придется отфильтровать это.

Вы можете попробовать "grep" вывод вашей записи, если вы отметили ее.Например: согласно вашей статье вывод должен выглядеть следующим образом:

Console: Hello World http://www.example.com/hello.html :82

Если вы используете команду (при условии, что вы используете Linux, Mac OS или что-то еще с командой grep)

adb logcat | grep -i "console"

уменьшит вывод до ключевого слова, указанного в этих кавычках.Если вы добавите в свой вывод уникальный тег, вы также можете отфильтровать его, чтобы получить только то, что хотите увидеть.

[ctrl]+c

остановит этот процесс logcat.

3 голосов
/ 06 мая 2011

См. Это: Как отобразить вывод console.log () в приложении PhoneGap с использованием Eclipse и HTC Desire HD?

Кажется, что console.log отключен на устройствах HTC под управлением Android 2.2.

Вы можете обойти это, используя удаленную отладку в jsconsole.com .

0 голосов
/ 04 мая 2011

Попробуйте следующее:

1) Откройте вкладку «Устройства» и убедитесь, что подключенное устройство выбрано / выделено.

2) Убедитесь, что на вашем устройстве включена отладка по USB. Вот что вам нужно сделать для этого:

2a) На Начальном экране нажмите МЕНЮ, а затем нажмите Настройка> Приложения> Разработка.

2b) Убедитесь, что установлен флажок «Отладка USB».

...