2016-04-04 5 views
0

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

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

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

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

Sent сразу после корневого элемента документа, но перед выполнением какого-либо сценария на нем , (Source)

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

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

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

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

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

[Exception ... "Компонент возвращается код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]" nsresult: «0x80004005 (NS_ERROR_FAILURE)»место: "JS рамка :: ресурс: //gre/modules/PopupNotifications.jsm :: PopupNotifications_refreshPanel/< :: строка 667" данные: нет] (неизвестный)

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

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

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

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

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

Весь проект можно найти на my Github repository.

регистрирующий наблюдателя находится в пп.JS в строке 452,

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

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

Котировочная плагин-пример можно найти в строках 399-403

Я был бы признателен за любую помощь!

ответ

0

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

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

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

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

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

+0

Если вы получаете доступ к документам содержания через наблюдателей, то это проблема с вашим аддоном, не совместимым с e10s, а не с firefox. – the8472

+0

Вы, конечно, правы - это то, что мне нужно исправить в моем аддоне. То, что я действительно хотел сказать, было больше похоже на это: «Угадайте, что я просмотрю сообщения об ошибках на bugzilla.mozilla.org, чтобы узнать, не могу ли я это исправить прямо сейчас, или если это то, что они могут сделать на своем конце/добавить в документацию ». Как и в, возможно, сделайте короткую заметку на странице наблюдателя [https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts#Observers_in_the_chrome_process]. Я отредактирую свой комментарий, чтобы сделать его более понятным. – Sintho