-
Notifications
You must be signed in to change notification settings - Fork 39
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ещё анимашки #551
Comments
Я думаю первое что нужно сделать найти где и по какому сигналу это включаеться и выключается, начинай именно с самой анимашки. |
Я уже знаю, как включать и выключать анимацию - это элементарно просто. Но тут всплыли технические проблемы.
Придётся медленно и печально разбираться в происходящем с помощью отладочного вывода в консоль. Но это же каждый раз omni.ja пересобирать надо. Я знаю, как отлаживать дополнения в исходном виде, без их упаковки в .xpi. А для omni.ja такая возможность есть? |
Что-то у меня и с отладочным выводом не получается. В разных местах браузера вывод в консоль осуществляется разными методами. Натыкал в него свои |
Разобрался я, почему Оказывается, при самом первом запуске браузера (точнее, при создании профиля пользователя) откомпилированное содержимое omni.ja кешируется и в дальнейшем берётся именно из этого кеша, даже несмотря на то, что дата и размер исходного файла изменились. Если кеш грохнуть, файл закешируется заново уже в изменённом состоянии. И нужно не забывать так делать после любых изменений. |
После того, как удалось победить вывод в консоль, обнаружилось, что что-то неладно в датском королевстве. За процессом загрузки вкладки следит некий WebProgressListener, который получает извещения о разных событиях, происходящих в процессе загрузки документа. Нас в первую очередь интересуют два класса событий: StateChange и StatusChange. Заголовок функции, которая принимает извещения, выглядит так: Первые два параметра - объекты, позволяющие определить, кто породил пришедшее событие. Третий - числовой код состояния запроса ("a numeric value that indicates the current status of the request"). Четвёртый - словесное описание состояния (это именно то, что мелькает в строке статуса в процессе загрузки страницы). Из всего этого добра интересует именно код состояния, потому что на описание ориентироваться нельзя - оно локализуемое: нет пакета локализации - описания на английском; поставил я себе русский перевод - всё, описания уже на русском. Я вставил в самое начало этого обработчика такие строки:
И вот что оно мне пишет:
Как видим, события в функцию приходят разные, но код у них всё время один и тот же - 0. Как такое может быть? Это не ошибка в браузере, случаем? |
Решил посмотреть, что полезного можно выжать из объекта в параметре aRequest. По документации у него есть два информационных поля:
Но на практике оказывается, что никакого объекта функция не получает вообще - значение параметра aRequest всегда null. И параметр aWebProgress тоже всегда null 🤨 |
Думаю не там ищеш, ну и omni.ja это зип, я обычно там делаю всё внутри фаром. Распаковать тоже можно, но как праильно не знаю, смотреть как что в исходн |
Так и я FAR-ом делаю. Всё равно это далеко не так удобно, как сразу с распакованным файлом работать. И что мешало при старте сравнивать дату и размер закешированного файла с его текущим состоянием? Может, как раз тот факт, что они с архивированием не парятся, а работают с распакованными файлами? Ну да ладно, это проблемы технические. Сейчас главное выяснить, почему события StatusChange приходят такими кастрированными: из четырёх их параметров те три, с которыми можно работать программно, просто обнулены, а четвёртый годится только чтобы его пользователю показать. |
В распакованном тоже нужо чистить (purgecahes) |
То есть, распакованный omni.ja Mypal подхватывать умеет? Как? А кеш чистить это ерунда. В том же FAR-e - полсекунды дела. |
Собирать из исходников или распаковать правильно, смотреть как там omni.ja пакуются и сделать обратную процедуру |
У меня нет проблем с упаковыванием omni.ja. Но это бессмысленные затраты времени. Для дополнений же (xpi которых тоже zip) есть способ устанавливать их в браузер и отлаживать прямо на дереве исходных текстов, не тратя времени на создание архива. Вполне логично предположить, что и для omni.ja должен быть подобный способ. И когда ты написал: "В распакованном тоже нужо чистить" - я решил, что ты этот способ знаешь. |
Проследил цепочку вызовов вверх по стеку до функции Те нули вместо осмысленных значений она получает откуда-то извне, от того, кто её вызвал. Но стек вызовов на ней заканчивается. То есть, она вызывается откуда-то из сишного кода, и JS-отладчик тут бессилен. Найти место её вызова анализом исходников не получилось. Так что теперь вся надежда на автора с нормальным отладчиком. |
Немного поизучал, что происходит при докачке информации на страницы, и понял, что был несколько неправ в предложенном мной методе. На самом деле там всё несколько иначе, и возможно, что правильная реализация будет даже проще, чем моё первоначальное предложение.
XMLHttpRequest отслеживать не нужно - через него скачивают только мелкий файлик (обычно JSON или XML), содержащий информацию о тех объектах, которые нужно показать на пустом месте страницы. А дальше скрипт ничего не скачивает, а создаёт и добавляет на страницу новые объекты. Если объект - картинка, скрипт прописывает ей атрибут
src
. И дальше уже сам браузер отправляет на сайт свой обычный запрос. (В Мониторе сети эти запросы идут в разделе HTML, а не XHR).И значит, отслеживать и индицировать нужно наличие именно таких запросов - точно так же, как при начальной загрузке страницы.
Originally posted by @zanud in #549 (comment)
The text was updated successfully, but these errors were encountered: