Как я могу отследить, из какой вкладки или сценария содержимого пришло сообщение?

В надстройке Firefox мне нужно отслеживать, с какими сообщениями на вкладках связаны сообщения. Сценарий контента будет отправлять данные в файл main.js. Позже, когда пользователь нажмет кнопку расширения на панели инструментов, он будет искать данные, связанные с активной вкладкой.

В расширениях Chrome при получении сообщения я мог спросить, с какой вкладки пришло сообщение, и отслеживать сообщения по идентификатору вкладки. В Firefox вкладки тоже имеют идентификаторы , но, похоже, нет простого способа получить к ним доступ из скриптов содержимого.


person Community    schedule 17.10.2014    source источник


Ответы (1)


Ответ зависит от того, каким образом вы создаете сценарии содержимого. Ниже приведен пример файла main.js для добавления сценариев контента с помощью Мод страницы.

var buttons = require('sdk/ui/button/action'),
    pageMod = require('sdk/page-mod'),
    data = require('sdk/self').data;   

// Map of messages keyed by tab id
var messages = {};

pageMod.PageMod({
  include: 'http://www.example.com',
  contentScriptFile: [
    data.url('my-script.js')
  ],
  onAttach: function(worker){

    // Get the tab id from the worker
    var tabId = worker.tab.id;

    // Save the message
    worker.port.on('message', function(message){
      messages[tabId] = message;
    });

    // Delete the messages when the tab is closed
    // to prevent a memory leak
    worker.on('detach', function(){
      delete messages[tabId];
    });
  }
});

var button = buttons.ActionButton({
  id: 'my-extension',
  label: 'Example',
  icon: {
    '16': './icon-16.png',
    '32': './icon-32.png',
    '64': './icon-64.png'
  },
  onClick: function(state){

    // Retrieve the message associated with the
    // currently active tab, if there is one
    var message = messages[tabs.activeTab.id];

    // Do something with the message
  }
});

Я также рекомендую прочитать Сценарии содержимого — взаимодействие со сценариями страницы и Content Worker для лучшего понимания о том, что происходит и как адаптировать его к вашей ситуации.

person Community    schedule 17.10.2014