Задать вопрос
RUVATA
@RUVATA
Разработчик, гик, меломан, разгильдяй

Модификация нативных js-библиетек в Thunderbird/FireFox (omni.ja)?

Всем доброго времени суток,

Мне необходимо солидно кастомизировать почтовый клиент Thunderbird, и казалось он как никто другой замечательно подходил на эту роль, в каталоге с программой в JAR-пакете omni.ja расположены исходные коды практически всего базового функционала, и логики его работы. Код был быстро прочитан разобран, модифицирован по необходимости (для начала совсем чуть-чуть изменения буквально в пару строк в одном из js файлов) после чего коды пересобраны в JAR-пакет (при помощи jar.exe из JAVA JDK).

Thunderbird успешно запустился, даже в его JavaScript Debugger отобразился код с внесенными изменениями.

И тут меня ждало саое большое разочарование — добавленный код просто не выполняется !

Ни ошибок, ничего, он просто не выполняется, интуиция подсказывает что работает какая-то хитрая система защиты от модификации этих самых исходных кодов (XPCSafeJSObject — вот такую штуку я затрейсил, не она ли?).


Но предварительное гугление привело меня к тому, что это работает и люд таки модифицирует omni.ja.

Прошу помощи у хабраразума, возможно уже наступавшего на подобные грабли.
  • Вопрос задан
  • 6157 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
RUVATA
@RUVATA Автор вопроса
Разработчик, гик, меломан, разгильдяй
Проблема оказалась не в защите файлов кода, а в специальной опции кеширования nglayout.debug.disable_xul_cache по умолчанию установленной в true (кеширует XUL и JavaScript код, как раз то что мы меняем), причем мысли мои уже шли в этом направлении, но я наивно предполагал что опция очистки кэша из интерфейса клиента сбрасывает кэш в принципе, ан нет, таким образом сбрасывается только «пользовательский кэш», а «служебный кэш» — это сущность отдельная.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@GDApsy
программирование на python;linux
Прочел о XPCSafeJSObject на SO и судя по ответу, эта штука не сам код защищает от изменений, а защищает данные, находящиеся в объектах и переменных от изменений со стороны пользовательского кода. Изменять можно через XPCSafeJSObject, но не в обход него.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы