0

У меня возникли проблемы с преобразованием сложного расширения Chrome в дополнение к Firefox. В расширении Chrome, автор использует некоторые Chrome API, такие какКак конвертировать расширение Chrome (с конкретными API-интерфейсами Chrome) в дополнение к Firefox?

  • chrome.extension.sendMessage
  • chrome.browserAction.setIcon
  • webkitNotifications.createNotification
  • chrome.tabs.sendMessage
  • chrome.extension.onMessage.addListener
  • chrome.browserAction.onClicked.addListener
  • chrome.privacy.services.autofillEnabled.get
  • chrome.runtime.onInstalled.addListener
  • chrome.tabs.query
  • localStorage

и так далее.

Я не знаю, как реализовать эти методы в дополнительном коде Firefox. Некоторые из этих API можно вызвать с помощью функции обратного вызова. Например:

chrome.extension.sendMessage ({ 
     type: "get.identitieswithurl", 
     originUrl: lgmIdentitySave.originUrl, 
     actionUrl: lgmIdentitySave.actionUrl 
    }, 
    function (resultIdentities) { 
     if(resultIdentities != null && resultIdentities.length > 0) { 
      lgmIdentitiesPage = resultIdentities; 
      fillFormsWithCredential(resultIdentities[0]); 
      if(resultIdentities.length > 1 && lgmSuggestionSelectIdDismissed == false) { 
       showSelectIdentitySuggestionBar(); 
      } 
     } 
    } 
);  

От this question, я знаю, что код Firefox может быть записан как

// main add-on script 
pageMod.PageMod({ 
    include: "*.org", 
    contentScriptFile: self.data.url("my-script.js"), 
    // Send the content script a message inside onAttach 
    onAttach: function (worker) { 
     worker.port.emit("replacePage", "Page matches ruleset"); 
    } 
});  

Но я до сих пор не знаю, как добавить функцию обратного вызова.

+0

Спасибо за ваш идеальный редактировать @ Брок-Адамса. – penkzhou

+0

Добро пожаловать. Удачи. –

ответ

8

Давайте рассмотрим ваш список. Во всем ответе я буду ссылаться на соответствующий documentation. Если вы совершенно не знаете, как начать работу с надстройкой Firefox, прочитайте учебник Getting started.

Перед тем, как начать, также читайте о modules и SDK Idioms (последнее очень важно, потому что оно дает объяснение важным концепциям в мире SDK надстройки Firefox).

  • chrome.extension.sendMessage/chrome.tabs.sendMessage/ chrome.extension.onMessage.addListener
    См Content scripts, чтобы узнать, как работать с sdk/page-mod модулем и огибают сообщений.

  • chrome.browserAction.setIcon и chrome.extension.onMessage.addListener
    Я написал модуль SDK, который является полной реализацией chrome.browserAction API Хрома для Firefox. Инструкции по установке и документация находятся по адресу https://github.com/Rob--W/browser-action-jplib.

  • webkitNotifications.createNotification
    См sdk/notifications модуль.

  • chrome.privacy.services.autofillEnabled.get
    См sdk/preferences/service модуль. Список идентификаторов предпочтений можно найти в статье about:config entries.Для вашего конкретного примера:

    var prefName = 'browser.formfill.enable'; 
    var prefService = require("sdk/preferences/service"); 
    var isAutoFillEnabled = prefService.get(prefName); // true or false 
    
  • chrome.runtime.onInstalled.addListener
    ли был установлен ваш добавочный номер может быть определен путем считывания loadReason property of the self module, например,

    if (require('sdk/self').loadReason == 'install') { 
        // Do something on the very first install 
    } 
    
  • chrome.tabs.query
    sdk/tabs модуля является итератором. Вы можете прокручивать объект и отфильтровывать результаты самостоятельно.

  • localStorage
    См sdk/simple-storage

+0

будет ли дополнение Firefox, разработанное с помощью addon builder, обеспечить ту же функцию, что и расширение chrome? – penkzhou

+0

@ dapengalways Если вы его правильно реализуете, да. Дополнения Firefox на самом деле более мощные, чем расширения Chrome, поскольку Firefox надстройки доверяют Firefox и работают на одном уровне привилегий. –

+0

Спасибо за ваш ответ. Часть main.js (может потребоваться иная часть модуля) в firefox так же, как и фоновая часть расширения chrome, правильно ли я, поэтому, когда фоновая часть в расширении chrome имеет много js-файлов, соответственно, в дополнении firefox мы должны изменить эти js-файлы в модуль main.js, main.js будет вызываться, когда открывается просмотр. Правильно? – penkzhou