Estoy tratando de hacer un progreso posicionando mi panel en una marca Add-on con el nuevo SDK.Posicionamiento del panel con el SDK Add-on de Firefox
veo que la documentación muestra sólo uno manera de controlar la posición de un panel, y que es pasando un ancla cuando se show()
:
show(anchor)
Displays the panel. [ anchor : handle ]
A handle to a DOM node in a page to which the panel should appear to be anchored. If not given, the panel is centered inside the most recent browser window. Note that it is not currently possible to anchor panels in this way using only the high level APIs.
Idealmente, me gustaría que el ancla para ser el widget que el panel aparece anclado cuando se hace clic en ese widget, pero el widget no es un DOM node in a page
así que supongo que no ...
Probablemente pueda solucionar esto, pero ni siquiera puedo encontrar un trabajo ejemplo de cómo anclar el panel a un nodo DOM. Cuando paso hacia atrás un nodo DOM en un contentScript
través port
así:
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);
});
}
datos/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 });
consigo el siguiente error de la consola:
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
Cualquier información que me ayude a anclar con éxito a un elemento DOM, o encontrar otra forma de posicionar el panel sería genial.
Gracias.
Gracias por su respuesta canuckistani, pero esto no ayuda a que el Panel quede anclado visualmente al widget (o elemento DOM) cuando se abre programáticamente. – doctororange
Si en su lugar desea anclar un Panel a un elemento DOM, necesita 1) obtener un control sobre el elemento DOM, luego 2) llamar PanelThingy.show (DOMHandle) – canuckistani
Desafortunadamente, según myk, "Panel.show() espera que un objeto DOM real sea el ancla, y los mensajes serializan sus cargas útiles a JSON, quitándoles su identidad de objeto en el proceso ". Como tal, no puede pasar un objeto DOM a la JS principal. Se está discutiendo un error relacionado aquí: https://bugzilla.mozilla.org/show_bug.cgi?id=638142 – doctororange