使用SDK制作对话框的正确方法是什么(不是固定在附加栏上,而是以屏幕为中心显示)?似乎没有任何API可用于此重要功能.我确实看到windows/utils了,open但我有两个问题:
window/utils" open()对话框,我不知道如何将附加内容脚本,这样我就可以在某种程度上提示响应用户交互(并且可以响应),ALA特权的行为,postMessage或port.emit(无需再次,直接使用chrome privs).好的,对于有一点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)
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |