В моем расширении Firefox событие onUninstalled, похоже, не срабатывает

#firefox #firefox-addon #firefox4

#firefox #firefox-дополнение #firefox4

Вопрос:

Firefox 4 предоставляет некоторые события для определения того, когда пользователь удаляет расширение. Я могу заставить onUninstalling сработать (когда пользователь нажимает, чтобы удалить расширение), но я не могу заставить что-либо произойти при onUninstalled срабатывании (которое должно произойти после перезагрузки).

 Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.addAddonListener({
    onUninstalled: function(addon){
        //does not work
        alert("uninstalled!");
    },
    onUninstalling: function(addon){
        //works as expected
        alert("uninstalling!");   
    }
  });
  

В конечном итоге я надеюсь показать страницу после того, как пользователь удалит мое расширение. Я бы предпочел сделать это после onUninstalled, если бы мог.

Ответ №1:

Метод onUninstalled вызывается после удаления расширения, поэтому ваше расширение не может получить свое собственное событие удаления, оно больше не может его получать. Однако вы можете получить уведомление об удалении других дополнений, в этом смысл этого события. Глядя на исходный код, кажется, есть дополнительная проблема — это уведомление отправляется только для дополнений, которые не требуют перезапуска. Это имеет смысл, учитывая, что перезапуск может радикально изменить ситуацию, поскольку внешние приложения добавили или удалили дополнения в каталоге extensions. Таким образом, Firefox даже не пытается сообщить об изменениях, которые произошли, пока он не был запущен, все слушатели должны просто перечитать список дополнений при каждом запуске браузера.

Подводя итог, вы должны использовать «классическое» расширение onUninstalling , хотя это событие не гарантирует, что расширение будет удалено (пользователь все еще может отменить свой выбор). Загружаемые расширения (те, которые не требуют перезапуска, см.https://developer.mozilla.org/en/Extensions/Bootstrapped_extensions ) сделайте это проще, метод uninstall() в их bootstrap.js будет вызвано, даже если расширение отключено. Однако превратить ваше расширение в загружаемое не всегда просто, к этому прилагается ряд проблем: http://adblockplus.org/blog/how-many-hacks-does-it-take-to-make-your-extension-install-without-a-restart

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

1. Отличное объяснение! Спасибо за продуманный ответ.