Object.defineProperty() работает во время тестирования (запуск jpm), но ничего не делает при использовании фактического xpi

Ну, вот я снова вернулся с другой проблемой, касающейся частей моего аддона.

Я использую наблюдателя для изменения значений, вызываемых через JavaScript.

var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(this, "document-element-inserted", false);

Я делаю это, наблюдая "вставка документа-элемента", который

Отправляется сразу после того, как корневой элемент документа был создан, но перед выполнением любого сценария для него. ( Источник)

При вызове мое дополнение изменяет несколько значений документа / навигатора / экрана, чтобы уменьшить отпечатки пальцев, переопределяя значения навигатора: X:

Object.defineProperty(XPCNativeWrapper.unwrap(navigator), "plugins", {
    value: "",
});

В этом случае, например, список плагинов, который выглядит так, как будто у меня вообще не установлены плагины.

До сих пор это работало нормально в моей среде разработки /jpm run. Однако теперь, когда я создал настоящий xpi, ничего не происходит. Код по-прежнему вызывается, я использовал несколько выводов консоли в своей функции jSTracking, и все они появились в консоли браузера. Однако предположительно измененные значения все еще являются исходными.

Есть только две ошибки, которые не появляются при использовании jpm run:

[Исключение... "Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" расположение: "JS frame:: resource://gre/modules/PopupNotifications.jsm:: PopupNo Ресцентрации /<:: строка 667 "данные: нет] (неизвестно)

бросается дважды во время установки.

Использование nsIFile в процессе контента не рекомендуется. Content.js:25:17

Использование nsIFile в процессе контента не рекомендуется. NETUtil.jsm:335:12

Является ли другой, который появляется время от времени, хотя никогда не связан с моими сценариями.

Больше всего меня смущает: почему Object.defineProperty работает с jpm, а не с xpi? Что я должен изменить, чтобы это всегда работало?

Весь проект можно найти в моем хранилище Github.

Регистрация наблюдателя находится в pp.js в строке 452,

функция наблюдения находится в строках 436-446

и функция jsTracking начинается в строке 193 и заканчивается в строке 433

Приведенный пример плагина можно найти в строках 399-403.

Буду благодарен за любую помощь, спасибо!

1 ответ

Ну, это было легче "исправить", чем я думал.

Я случайно просматривал темы Firefox, когда увидел упоминание о e10s/ мультипроцессорной функциональности Firefox и о том, что не все дополнения совместимы.

Попробовал мой аддон с моим стандартным firefox вместо ночной сборки, и все работает как положено.

Поэтому на мои вопросы дан ответ, и мне остается только беспокоиться о совместимости e10s.

Думаю, я посмотрю отчеты об ошибках на bugzilla.mozilla.org, чтобы увидеть, могу ли я это легко исправить или, может быть, они могут что-то добавить в документацию с их стороны.

Другие вопросы по тегам