Addon SDK方式进行对话

Bre*_*mir 2 firefox-addon-sdk

使用SDK制作对话框的正确方法是什么(不是固定在附加栏上,而是以屏幕为中心显示)?似乎没有任何API可用于此重要功能.我确实看到windows/utils了,open但我有两个问题:

  1. 对话框打开似乎需要"chrome"privs才能让它在屏幕上居中(我期待附加评论者抱怨chrome privs,即使不是,我也想尝试坚持SDK方式).
  2. 虽然我可以得到新的DOM窗口引用window/utils" open()对话框,我不知道如何将附加内容脚本,这样我就可以在某种程度上提示响应用户交互(并且可以响应),ALA特权的行为,postMessageport.emit(无需再次,直接使用chrome privs).

Bre*_*mir 5

好的,对于有一点SDK经验的人来说,这个答案应该是非常明显的.我意识到我可以使用面板.在我的辩护中,名称"面板"并不像"对话框"那样清晰地形成这个想法,而且我习惯使用带有小部件的面板,我没想到我可以独立使用它!

编辑

不幸的是,根据Bug 595040,这些对话框不是持久性的,这意味着如果面板失去焦点,"对话框"就消失了......所以面板看起来似乎不是一个合适的候选人...... :(

编辑2

我已经开始了,并且已经让事情变得非常令人满意,sdk/window/utils并且openDialog在其返回的窗口中我添加了一个加载侦听器,然后调用tabs.activeTab.on('ready',然后设置tabs.activeTab.url为我的附加本地HTML文件,以便ready事件将获得一个选项卡,我可以附加一个工人.我认为chrome privs仍然存在问题,但至少主要的通信是使用SDK进程.

更新到编辑2:

代码样本按要求提供:

var data = require('sdk/self').data,
    tabs = require('sdk/tabs');
var win = require('sdk/window/utils').openDialog({
    // No "url" supplied here in this case as we add it below (in order to have a ready listener in place before load which can give us access to the tab worker)
    // For more, see https://developer.mozilla.org/en-US/docs/Web/API/window.open#Position_and_size_features
    features: Object.keys({
        chrome: true, // Needed for centerscreen per docs
        centerscreen: true, // Doesn't seem to be working for some reason (even though it does work when calling via XPCOM)
        resizable: true,
        scrollbars: true
    }).join() + ',width=850,height=650',
    name: "My window name"
    // parent: 
    // args: 
});
win.addEventListener('load', function () {
    tabs.activeTab.on('ready', function (tab) {
        var worker = tab.attach({
            contentScriptFile: ....
            // ...
        });
        // Use worker.port.on, worker.port.emit, etc...
    });
    tabs.activeTab.url = data.url('myHTMLFile.html');
});
Run Code Online (Sandbox Code Playgroud)