xul 创建一个按钮
- MDN
- Mozilla 产品与私有技术
- Mozilla 私有技术
- XUL
- Toolbars
- 添加工具栏按钮 (定制工具栏)
添加工具栏按钮 (定制工具栏)
此文章解释如何使用 overlays 为工具包(firefox,Thunderbird 或 Kompozer) 添加工具栏按钮(就是浏览器右上方一系列按钮,home,下载之类的)。适用用户是拥有 XUL 和 CSS 基础知识的 扩展 开发人员。
我们假设您已经会创建基础的火狐插件,并且已经成功创建了 Hello World extension ,另外,还有一份更加完全的初学者示例指南,请查看 自定义工具栏按钮。
创建一个 overlay
The first step is to create an overlay for the document containing the toolbar you wish to enhance. Explaining overlays is beyond the scope of this tutorial -- you can read about them in the XUL Tutorial.
To overlay a document, you need to know its URI. You can find a list of URIs for the most commonly overlaid documents at the bottom of this page.
chrome://messenger/content/mailWindowOverlay.xul. That should cause the button to appear on all windows that mailWindowOverlay.xul is applied to (i.e. Main window and View Message window). This needs to be looked into.在工具栏添加按钮
Toolkit applications have customizable toolbars; therefore, it's common practice for extensions to add their toolbar buttons to the toolbar palette, rather than adding them directly to the toolbar. The latter is possible but is not recommended and is harder to implement.
Adding a button to the toolbar palette is very easy. Just add code like this to your overlay:
<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="myextension-button" class="toolbarbutton-1"
label="&toolbarbutton.label;" tooltiptext="&toolbarbutton.tooltip;"
oncommand="MyExtension.onToolbarButtonCommand(event);"/>
</toolbarpalette>
注意:
- The
idof the palette (BrowserToolbarPalettein the example) depends on the window whose toolbar you wish to insert a button into. See below for the list of common palette IDs. class="toolbarbutton-1"makes the toolbar button appear correctly in Icons and Text mode; it also adjusts padding.- If you need to handle middle-click, add this line after the oncommand line.
onclick="checkForMiddleClick(this, event)"
- you can also handle middle-lick and right-click using
onclickhandler and checkevent.buttonin it. like this:
<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="myextension-button" class="toolbarbutton-1"
label="&toolbarbutton.label;" tooltiptext="&toolbarbutton.tooltip;"
onclick="MyExtension.onclick(event);"/>
</toolbarpalette>
onclick: function(event) {
switch(event.button) {
case 0:
// Left click
break;
case 1:
// Middle click
break;
case 2:
// Right click
break;
}
}
To add more buttons, put more <toolbarbutton> elements inside the <toolbarpalette> element. Wrap elements other than <toolbarbutton> in<toolbaritem>.
为按键应用风格
Most toolbar buttons have an icon. To attach an image to the button we use standard Mozilla skinning facilities. If you're unfamiliar with how that works, read the skinning section of Jonah Bishop's excellent Toolbar Tutorial. Although the article covers creating an entire toolbar, rather than just a button, it has a great explanation of the techniques we'll use here.
图标大小
Toolbar buttons can have two different sizes -- big and small. This means you'll need to provide two icons for each of your toolbar buttons. The dimensions of the icons in various applications for both modes are summarized in the following table (feel free to add information about other applications):
| Application (Theme name) | Big icon size | Small icon size |
|---|---|---|
| Firefox 1.0 (Winstripe) | 24x24 | 16x16 |
| Thunderbird 1.0 (Qute) | 24x24 | 16x16 |
CSS 样式表
To set the image for your toolbar button, use the following CSS rules:
/* skin/toolbar-button.css */
#myextension-button {
list-style-image: url("chrome://myextension/skin/btn_large.png");
}
toolbar[iconsize="small"] #myextension-button {
list-style-image: url("chrome://myextension/skin/btn_small.png");
}
应用样式表
Remember to attach the stylesheet you created to both the overlay file and the Customize Toolbar window. To attach it to the overlay, put this processing instruction (PI) at the top of the overlay file:
<?xml-stylesheet href="chrome://myextension/skin/toolbar-button.css" type="text/css"?>
chrome.manifest file. This is very important because the toolbar customization dialog won't work correctly without this.To include the style on your chrome.manifest file:
style chrome://global/content/customizeToolbar.xul chrome://myextension/skin/toolbar-button.css
If you are developing for Firefox 1.0, attach it to the Customize Toolbar window (chrome://global/content/customizeToolbar.xul) usingskin/contents.rdf. The code looks like this:
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<Seq about="urn:mozilla:skin:root">
<li resource="urn:mozilla:skin:classic/1.0"/>
</Seq>
<Description about="urn:mozilla:skin:classic/1.0">
<chrome:packages>
<Seq about="urn:mozilla:skin:classic/1.0:packages">
<li resource="urn:mozilla:skin:classic/1.0:myextension"/>
</Seq>
</chrome:packages>
</Description>
<Seq about="urn:mozilla:stylesheets">
<li resource="chrome://global/content/customizeToolbar.xul"/>
</Seq>
<Seq about="chrome://global/content/customizeToolbar.xul">
<li>chrome://myextension/skin/toolbar-button.css</li>
</Seq>
</RDF>
The skin/contents.rdf file is denigrated in developing for later releases of Firefox. Extensions for Firefox/Thunderbird 1.5 and above should instead use something like this in their chrome.manifest:
skin myextension classic/1.0 chrome/skin/
style chrome://global/content/customizeToolbar.xul chrome://myextension/skin/toolbar-button.css
ia
Take note of the Packaging section in this article; you may need to include .jar references if you are delivering your extension as a .xpi file.
常见错误
This is a list of the most common mistakes made by extension authors, including both symptoms and solutions.
Problem: The whole set of default buttons is painted on the toolbar or in the Customize Toolbars window, instead of your own icon.
Caused by: Malformed or not applied stylesheet.
Solution: Check to be sure your stylesheet is correct, make sure your contents.rdf (or chrome.manifest) is correct, and be sure you didn't forget to apply the stylesheet to customizeToolbar.xul.
常见工具栏的 overlayed windows
| URL | Application and affected window(s) | Palette id |
|---|---|---|
| chrome://browser/content/browser.xul | Firefox - Main window | BrowserToolbarPalette |
| chrome://navigator/content/navigator.xul | SeaMonkey 2.0 - Browser window | BrowserToolbarPalette |
| chrome://messenger/content/messenger.xul | Thunderbird - Main window | MailToolbarPalette |
| chrome://messenger/content/messenger...gercompose.xul | Thunderbird - Compose window | MsgComposeToolbarPalette |
| chrome://messenger/content/addressbo...ddressbook.xul | Thunderbird - Address book | AddressBookToolbarPalette |
| chrome://editor/content/editor.xul | Kompozer - Main window | NvuToolbarPalette |
| chrome://calendar/content/calendar.xul | Sunbird - Main window | calendarToolbarPalette |
更多信息
- XulPlanet.com references:
<toolbarbutton>,<toolbaritem>. - How to adjust toolbarbutton's label position
- A forum thread about adding an item to the toolbar (instead of just adding it to palette) right after an extension is installed. Note that doing this is not recommended.
- There is another page on mdc with information about adding buttons to various windows in SeaMonkey. Includes useful information about overlays for ChatZilla.
xul 创建一个按钮的更多相关文章
- unity编辑器扩展_01(在工具栏中创建一个按钮)
代码: [MenuItem("Tools/Test",false,1)] static void Test() { Debug.Log("tes ...
- PS网页设计教程XXVIII——如何在PS中创建一个干净的网页布局
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...
- ArcGIS Desktop python Add-in 创建一个插件
1)创建一个项目 首先创建一个插件项目,本节介绍如何利用向导创建一个插件项目. 创建任何一个ArcGIS插件产品的过程都是一样的. 创建一个Python插件项目包括2个步骤: a) 选择一个插件项目文 ...
- [Swift通天遁地]二、表格表单-(9)快速创建一个美观强大的表单
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 安卓入门 使用android创建一个项目 从启动activity中响应按钮事件 启动另一个activity 并传递参数
启动android studio创建一个新项目 public void sendMessage(View view){ Intent intent=new Intent(this,DispalyMes ...
- 创建一个apk:按钮-click-文字display,测试apk;安装在真机进行调试的方法
问题引入: 怎么样在一个app做event事件?例如touch操作,滑动操作,和按键事件(back,home等) 回答1:device.touch(x,y) ---获取device对象,然后touch ...
- 5.从零开始创建一个QT窗口按钮
如何创建一个QT项目 如何创建一个QT项目 1.创建新项目 2.配置选择 3.增加按钮 4.按钮和窗体的大小标签图标设置 5.信号与槽 6.自定义信号与槽 代码 1.创建新项目 点击文件->新建 ...
- [UWP]创建一个进度按钮
1. 前言 最近想要一个进度按钮. 传统上UWP上处理进度可以这样实现,首先是XAML,包括一个ProgressBar和一个按钮: <StackPanel Orientation="H ...
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
随机推荐
- jQuery中$this和$(this)的区别
要写一个点击弹窗任意地方,关闭弹窗.点击事件写标签在元素上 onclick = closepop(this),这时候很容易搞不清楚怎么去获取当前元素 function closepop(e){ va ...
- APP上线被APPStore拒绝的各种原因
1.程序有重大bug,程序不能启动,或者中途退出.2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币.3.游戏里有实物奖励的话,一定要说清楚,奖励由本公司负责,和苹果没有关系.4.用到苹果的标志 ...
- phpcms标签用法(转)
1.显示指定catid的栏目名称和链接 {$CATEGORYS[25]['catname']} {$CATEGORYS[25]['url']} 获取父栏目id/获取父栏目名称 $CATEGORY[ ...
- POJ_1050_(dp)
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 48232 Accepted: 25534 Desc ...
- HDU_1789_doing homework again_贪心
Doing Homework again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- NGS数据格式介绍
一般情况下,从Illumina平台上得到的测序,其数据格式是Fastq格式,可以称之为原始数据(Raw data).事实上直接的下机数据是显微拍摄得到的图像信息.但是一般都会用Bcl2Fastq软件将 ...
- 梦想3D控件 2018.7.26更新
下载地址: http://www.mxdraw.com/ndetail_108.html 1. 编写所有接口函数使用的CHM文档 2. 增加交互绘制功能 3. 增加案例弧形窗建模案例 4. 增 ...
- Redis系列(五)--主从复制
单机环境存在的问题: 1.机器故障,直接凉凉 2.容量瓶颈 3.QPS瓶颈 主从复制 对于可拓展平台来说,复制(replication)是必不可少的.replication可以让其他服务器slave拥 ...
- java的标识符和关键词
1.1.1 标识符 可以简单的理解为一个名字.在Java中,我们需要标识代码的很多元素,包括类名.方法.字段.变量.包名等.我们选择的名称就称为标识符,并且遵循以下规则: 标识符可以由字母.数字. ...
- 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
[题解] 我们可以发现不在最小生成树上的边一定不能多次经过,因为一条不在最小生成树上的边(u,v)的边权比最小生成树上(u,v)之间的路径更长,选择不在最小生成树上的边一定不划算. 我们还需要确定最小 ...