Модифицируем Chrome Logger — пост как стимул к изучению расширений Google Chrome и написанию своих

  • Tutorial
В своем комментарии: habrahabr.ru/post/177709/#comment_6169843 я описал проблему расширения из соответствующей статьи, кроме редиректов также есть проблемы с выводом логов AJAX запросов и возможно в некоторых случаях с iframe заголовками.
Я решил разобраться почему это происходит и понял, что то мое утверждение было слишком категоричным. После того как webRequest перестал быть экспериментальным developer.chrome.com/extensions/experimental.webRequest.html теперь можно писать логеры «на заголовках» обрабатывающие все, ранее проблемные, ситуации. Я не ставлю своей целью разобрать все такие ситуации, просто хотел бы показать — как можно модифицировать расширение Chrome Logger для решения части вышеуказанных проблем и возможно заинтересовать желающих разобраться с расширениями Google Chrome на простом примере. Может быть у кого-то после прочтения поста возникнет желание написать свое расширение.

Само расширение (текущая версия 4.0.1) после установки находится в большинстве случаев в папке
для windows:
C:\Users\Имя_пользователя\AppData\Local\Google\Chrome\User Data\Default\Extensions\noaneddfkdjfnfdakjjmocngnfkfehhd\4.0.1_0
для linux:
/home/Имя_пользователя/.config/google-chrome/Default/Extensions/noaneddfkdjfnfdakjjmocngnfkfehhd/4.0.1_0
где noaneddfkdjfnfdakjjmocngnfkfehhd это ID этого расширения см. рисунок ниже. Эта папка может быть и в другом месте, все зависит от настроек вашей системы, но думаю вы без труда теперь сможете ее найти.



Я рекомендую скопировать папку 4.0.1_0 для дальнейших экспериментов в удобное для вас место на диске, а само расширение удалить, чтобы оно не «пересекалось» с модифицируемым.
В скопированной папке нас интересует файл chromelogger.js
а именно строка:
chrome.webRequest.onResponseStarted.addListener(…
В этой строке используется метод onResponseStarted для вывода логов, но этот метод согласно документации по webRequest developer.chrome.com/extensions/webRequest.html срабатывает когда:
Fires when the first byte of the response body is received.
т.е. после приема первого байта тела ответа, но т.к. у «редиректяших» ответов нет тела, то и не выводится их лог ( как я и писал здесь: habrahabr.ru/post/177709/#comment_6169843)
для того, чтобы лог таки выводился, метод onResponseStarted надо заменить на метод onHeadersReceived — теперь строка будет иметь вид:
chrome.webRequest.onHeadersReceived.addListener(
после этого сохраняем файл, на странице расширений включаем чекбокс «Режим разработчика» и загружаем наше расширение (папку 4.0.1_0) с помощью кнопки «Загрузить распакованное расширение». Активируем его на тестовой странице и пробуем логировать из «редиректящего» скрипта — теперь лог выводится!
Это слишком упрощенная модификация, возможно в некоторых ситуациях модифицированное расширение не будет работать корректно (например метод onHeadersReceived может сработать не один раз), но я и не ставил целью написать «полнофункциональную» заплатку — просто хотел показать как это можно сделать.

P.S. Для логирования в консоль Google Chrome также есть хорошее расширение chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef работающее на cookies, автор обещал здесь habrahabr.ru/post/107810 переделать его на webRequest, но пока еще не переделал. Оно прекрасно логирует редиректы, ajax и iframe, но есть некоторые проблемы со всплывающими уведомлениями логов.
UPD: Как выяснилось из комментариев — автор уже переделал это расширение и скоро будет релиз новой версии!
Поделиться публикацией

Комментарии 6

    +2
    Для логирования в консоль Google Chrome также есть хорошее расширение chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef работающее на cookies, автор обещал...

    Как автор PHP Console спешу заверить, что новая версия работающая через headers уже написана, сейчас проходит стадию финального тестирования и подготовки к релизу. Что будет в новой версии можно почитать тут.

    Релиз затянулся т.к. мне стукнуло в голову реализовать в серверной части библиотеки ещё поддержку защиты канала авторизацией по паролю и удалённый вызов PHP кода. Это сделано для того, чтобы разработчикам не пришлось париться обновлять библиотеку на своих серверах когда поддержка этих фич будет реализована в самом расширении.
      0
      Да, кстати, в новой версии будет полноценная поддержка дампинга переменных любого типа, как в Chrome Logger, только по более быстрому алгоритму.
        0
        Замечательно! Ждем вашего релиза в Chrome Web Store.
        Пожалуйста добавьте там в обзор расширения более подробное описание этой возможности:
        Configure from context menu (just right click on web-page)
        Например я не сразу увидел наличие этого контекстного меню и возможность настройки всплывающих уведомлений. Кстати в многомониторной версии рабочего стола они всплывают независимо от расположения окна хрома на первом мониторе. Если можно сделайте так чтобы они всплывали на том же мониторе где находится окно хрома.
          0
          Пожалуйста добавьте там в обзор расширения более подробное описание этой возможности
          Будет добавлено короткое видео с демонстрацией всех имеющихся функций.

          Кстати в многомониторной версии рабочего стола они всплывают независимо от расположения окна хрома на первом мониторе.
          К сожалению на уровне Chrome Extensions API это не управляемо, тут с самим Chrome нужно разбираться.
          0
          Пока ваше обновленное расширение проходит стадию финального тестирования и подготовки к релизу — хотелось бы его попробовать и протестировать уже сейчас. Можете дать ссылку на его исходники?
          0
          Как еще один стимул: моё мини-пособие про создание расширения Habrahabr More. Исходники доступны для изучения/форка в github.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое