2011-07-18 24 views
8

Yeni SDK ile panelimi bir Eklenti yapısında konumlandırmaya çalışıyorum.Firefox Eklentisi SDK ile Panel Konumlandırma

Ben belgeleri bir panelin konumunu kontrol etmek yalnızca bir yol gösterir görüyoruz, ve sizin show() o zaman bir çapa ileterek geçerli: İdeal

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.

, ben çapa istiyorum Bu pencere öğesi tıklandığında panelin göründüğü pencere öğesi olmak, ancak pencere öğesi bir DOM node in a page değil, bu yüzden sanırım ...

Muhtemelen bu konuda çalışabilirim ama bir iş bulamıyorum bile paneli DOM düğümüne nasıl bağlayacağınız örneği. Bu gibi port ile contentScript bir DOM düğüm geri geçirmek:

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

veri/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 }); 

Elde Aşağıdaki konsol hatası:

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 

Bir DOM öğesine başarılı bir şekilde bağlanmanıza yardımcı olacak herhangi bir bilgi veya paneli konumlandırmak için başka bir yol bulmak harika olacaktır.

Teşekkürler. (Maalesef docs Bunun bir örneği bile yoktur)

[ panel : Panel ]

An optional panel to open when the user clicks on the widget. Note: If you also register a "click" listener, it will be called instead of the panel being opened. However, you can show the panel from the listener by calling this.panel.show().

İşte bir örnek:

cevap

1

Eğer Widget'ınızı tanımlarken, Panelinizin örneği olan bir pano özelliği ekleyebilir

yerine mainPanel.show() kullanmanın
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 */ } 
}); 
+0

Yanıtınız için teşekkürler canuckistani, ancak bu, Program aracılığıyla programın açıldığında pencere aracına (veya DOM öğesine) görsel olarak bağlanmasına yardımcı olmaz. – doctororange

+0

Bunun yerine bir DOM Öğesine bir Panel tutturmak istiyorsanız, 1) DOM öğesinde bir tanıtıcıya sahip olmanız gerekir, ardından 2) PanelThingy.show (DOMHandle) – canuckistani

+0

numaralı çağrıya göre, myk'ye göre, "Panel.show()) gerçek bir DOM nesnesini çapa olarak bekler ve iletiler, yüklerini JSON'a serileştirir ve süreç içinde nesne kimliklerini kaldırır. " Bu şekilde, bir DOM nesnesini ana JS'ye geri geçiremezsiniz. İlgili bir hata burada tartışılmaktadır: https://bugzilla.mozilla.org/show_bug.cgi?id=638142 – doctororange

2
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; 
    } 
}); 

, view.panel = mainPanel; kullanın. Ben bc problemi çözecek aynı şeyi yaptım.

İlgili konular