Расположение панели с помощью Firefox SDK Add-on - PullRequest
8 голосов
/ 18 июля 2011

Я пытаюсь добиться некоторого прогресса в позиционировании моей панели в дополнении с помощью нового SDK.

Я вижу, что в документации показан только один способ управления положениемпанель, и это путем передачи привязки, когда вы show() это:

show (anchor)

Отображение панели.[anchor: handle]

Дескриптор узла DOM на странице, к которой панель должна быть прикреплена.Если не указано, панель центрируется внутри самого последнего окна браузера.Обратите внимание, что в настоящее время невозможно привязать панели таким способом, используя только высокоуровневые API.

В идеале я бы хотел, чтобы привязкой был виджет, к которому панель привязана, когда этот виджетпо щелчку, но виджет не является DOM node in a page, поэтому я думаю, что нет ...

Я, вероятно, могу обойти это, но я даже не могу найти рабочий пример того, как прикрепить панель кDOM узел.Когда я возвращаю узел DOM в contentScript через port, например:

lib / main.js

  var scraper = pageMod.PageMod({
    include: ['*'],
    contentScriptWhen: 'ready',
    contentScriptFile: [data.url('jquery-1.6.2.min.js'), data.url('scraper.js')],
    onAttach: function(worker){
      worker.port.on('pageLoaded', function(page){
        widget.panel.show(page.anchor);
      }); 
    } 

data /scraper.js

$('body').append('
  <div id="anchor-to-me" style="position:fixed; bottom: 0; right: 0;">.</div>
');

var anchor = $('#anchor-to-me').get();
self.port.emit('pageLoaded', { anchor : anchor  }); 

Я получаю следующую ошибку консоли:

error: An exception occurred.
Traceback (most recent call last):
  File "resource://jid1-wuvxefqtmptsnw-at-jetpack-addon-kit-lib/panel.js", line 147, in show
    let document = getWindow(anchor).document;
  File "resource://jid1-wuvxefqtmptsnw-at-jetpack-addon-kit-lib/panel.js", line 345, in getWindow
    let anchorWindow = anchor.ownerDocument.defaultView.top;
TypeError: anchor.ownerDocument is undefined

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 15 мая 2013
const panel = require("panel").Panel({
  width: 240,
  height: 320,
  contentURL: data.url("foo.html"),
  contentScriptFile: [data.url("jquery-1.4.4.min.js"),
                      data.url("panel.js")]
});

const widget = widgets.Widget({
  id: "some-id",
  label: "Some label",
  contentURL: data.url("icon.png"),
  //panel: panel,
  onClick: function(view) { /* cool stuff */ 
     view.panel = panel;
  }
});

Вместо mainPanel.show() используйте view.panel = mainPanel;. Это решит проблему, я сделал то же самое.

1 голос
/ 02 августа 2011

Когда вы определяете свой виджет, вы можете добавить свойство панели, которое является экземпляром вашей панели:

[панель: Панель]

Дополнительная панель, которая открывается, когдапользователь нажимает на виджет.Примечание. Если вы также зарегистрируете прослушиватель "click", он будет вызываться вместо открытия панели.Однако вы можете показать панель из слушателя, вызвав this.panel.show ().

Вот пример (к сожалению, этого нет в документации):

const panel = require("panel").Panel({
  width: 240,
  height: 320,
  contentURL: data.url("foo.html"),
  contentScriptFile: [data.url("jquery-1.4.4.min.js"),
                      data.url("panel.js")]
});

const widget = widgets.Widget({
  id: "some-id",
  label: "Some label",
  contentURL: data.url("icon.png"),
  panel: panel,
  onClick: function() { /* cool stuff */ }
});
...