В моем расширении Firefox событие onUninstalled, похоже, не срабатывает - PullRequest
4 голосов
/ 08 июня 2011

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!");   
    }
  });

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

1 Ответ

5 голосов
/ 09 июня 2011

Метод onUninstalled вызывается после удаления расширения - поэтому ваше расширение не может получить собственное событие удаления, его больше нет рядом, чтобы его получить.Однако вы можете получить уведомление об удалении других надстроек, в этом и заключается смысл этого события.Глядя на исходный код, кажется, что есть дополнительный улов - это уведомление отправляется только для надстроек, которые не требуют перезапуска.Это имеет смысл, учитывая, что перезапуск может радикально изменить ситуацию, поскольку внешние приложения добавляют или удаляют надстройки в каталоге расширений.Так что 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

...