创建Firefox扩展
创建Firefox扩展 [A] [A] 原文地址:https://developer.mozilla.org/en/Building_an_Extension
翻译:Karl Ma
email: karlcpp@gmail.com
Instruction
- 传统的,经典的,或者说是XUL扩展。这种类型的扩展功能强大,但是安装此类扩展时需要重新启动Firefox。
- 非重启,或者说是自启动的扩展。这种类型的扩展在安装后不用重新启动,但是,与传统类型的扩展相比,它会受到更多的限制。Add-on SDK和Add-on Builder可以让你在创建非重启型扩展时容易一点。
Quick Start
Setting up the Development Environment
my_extension.xpi: | // 相当于my_extension/目录 |
/install.rdf | //你的扩展的通用信息 |
/chrome.manifest | //用Chrome引擎注册你的内容 |
/chrome/ | |
/chrome/content/ | //你的扩展的内容,例如XUL,JavaScript文件等 |
/chrome/icons/default/* | //扩展的默认图标 |
/chrome/locale/* | //创建扩展的本地化 |
/defaults/preferences/*.js | //创建扩展的默认文件 |
/plugins/* | |
/components/* | |
/components/cmdline.js |
从Gecko 1.9.2开始(也就是Firefox 3.6),你可以简单的在add-on的基准目录下增加一个图标文件,名字叫icon.png。这样的话,即使你的add-on不可用,或者iconURL入口丢失的情况下,这个图标也会显示出来。
Create the Install Manifest
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:em="http://www.mozilla.org/2004/em-rdf#"><Description about="urn:mozilla:install-manifest"><em:id>sample@example.net</em:id><em:version>1.0</em:version><em:type>2</em:type><!-- Target Application this extension can install into,with minimum and maximum supported versions. --><em:targetApplication><Description><em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id><em:minVersion>1.5</em:minVersion><em:maxVersion>4.0.*</em:maxVersion></Description></em:targetApplication><!-- Front End MetaData --><em:name>sample</em:name><em:description>A test extension</em:description><em:creator>Your Name Here</em:creator><em:homepageURL>http://www.example.com/</em:homepageURL></Description>
</RDF>
- sample@example.net - extension的ID。这是一个email格式的值(不一定就真的是你的邮件),用来标识你的这个extension。之所以要使用email,主要是为了使这个extension标识有唯一性而已。你可能会用GUID。注:这个参数必须是email格式,虽然它可能不是一个合法的email地址。
- <em:type>2</em:type> - 类型是2表示正在安装是一个extension,如果是一个theme的话,这个值应该是4(其它的类型看这里)。
- {ec8030f7-c20a-464f-9b0e-13a3a9e97384} - Firefox应用程序是的ID。
- 1.5 - 你的extension可以工作的最早的Firefox版本,要是一个精确的版本号,不能是*。如果你说什么也要写*的话,我敢保证它一定不会是你希望的那样在的工作。
- 4.0.* - 你的extension可以工作的最高的Firefox版本。4.0.*的意思是可以在4.0.x版本上工作。这个版本号应该要小于Firefox宣布的版本号。默认情况下,在Firefox 10或以后的版本不会强制约束maxVersion。你可以通过配置<em:strictCompatibility>项来要求应用程序强制约束maxVersion。
Extending the Browser with XUL
<statusbar id="status-bar">... <statusbarpanel>s ... </statusbar>
XUL Overlays
<?xml version="1.0"?>
<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"><statusbar id="status-bar"><statusbarpanel id="my-panel" label="Hello, World" /></statusbar>
</overlay>
这个叫做status-bar的statusbar我们想要附加其上的,浏览器窗口的合并点。
Chrome URIs
- 第一、URI方案(chrome),它告诉Firefox网络库,这是一个Chrome URI。它指示URI的内容应该按(chrome)方式处理。而(http)URI则要Firefox按网页的方式处理。
- 第二、包的名字(例子中就是browser),它标识了用户界面组件的集合。对于你的程序来说,它应该是独一无二的,以避免不同extension间的冲突。
- 第三、请求的数据类型。有三种类型:content(XUL,Javascript,XBL绑定等等,是应用程序的结构和行为),locale(DTD,属性文件等,是UI的本地化字符串),skin(CSS和image,是UI的主题)。
- 最后,加载文件的路径。
Create a Chrome Manifest
content sample chrome/content/
- 这个chrome包的类型。
- chrome包的名字(你要确保包的名字全部都是小写字母,如“sample"。这是因为Firefox和Thunderbird的2.0以前的版本不支持混合(或驼型)大小写)
- chrome包文件的位置。
Register an Overlay
overlay chrome://browser/content/browser.xul chrome://sample/content/sample.xul
Test
- 找到profile文件夹 [C] [C] 译者注:在linux操作系统下,此目录在~/.mozilla在它的下面找到你想要用于开发的profile(如:Firefox/Profiles/<profile_id>.default) [D] [D] 译者注:这是default profile,一般情况下最好新建一个专门用于开发的profile。执行命令firefox -P dev,会创建一个<profile_id>.dev的profile。
- 打开extensions/文件夹,如果还没有,就创建它。
- 创建一个文本文件,将你的开发路径放写在文件里(如:C:\extensions\my_extension\ or ~/extensions/my_extension/),Windows用户应保持反斜杠的方向,并且,所有的人都应该记得要包括最后一个斜杠同时去掉所有的尾部空格。
- 将这个文本文件保存成你的extension的id值(如:sample@example.net),没有文件扩展名。
Package
Installing from web page
Using addons.mozilla.org
Installing Extensions using a Separate Installer
More on XUL Overlays
<statusbarpanel position="1" ... /> <statusbarpanel insertbefore="other-id" ... /> <statusbarpanel insertafter="other-id" ... />
Create New User Interface Components
Default Files
pref("extensions.sample.username", "Joe"); //a string pref pref("extensions.sample.sort", 2); //an int pref pref("extensions.sample.showAdvanced", true); //a boolean pref
XPCOM Components
Application Command Line
Localization
locale sample en-US chrome/locale/en-US/
<!ENTITY my-panel.label "Hello, World">
<?xml version="1.0"?> <!DOCTYPE window SYSTEM "chrome://packagename/locale/filename.dtd"> ...
<statusbarpanel id="my-panel" label="&my-panel.label;" />
Understanding the Browser
Debuging Extensions
Analytical Tools for Debugging
- DOM Inspector- 检查属性,DOM结构,生效的CSS样式规则(例如:找出为什么你的样式表不能在某个元素的显现-直是一个无价的工具!)
- Venkman- 在javascript脚本中设置断点,并检查堆栈
- JavaScript的arguments.callee.caller - 访问函数调用堆栈
printf debugging
- 用dump("string") - 这个需要对工作上属性进行一点配置,详情请参阅这里。
- 用Components.utils.reportError()或nsIConsoleService将日志写到JavaScript终端
Advanced debugging
- 运行一个debug版本的Firefox,在Firefox或你的c++组件中设置断点。对于一个有经验的开发者,这通过是最快的诊断问题的方法。详情请参阅Build Documentation 和Developing Mozilla。
- 参见Debugging a XULRunner Application会看到更多的技巧和帮助。
Further Information
- Extension FAQ
- Extensions
创建Firefox扩展相关推荐
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
- firefox附加组件开发者指南(五)——创建一个firefox扩展(上)
本章篇幅较长,分上下两部分发布,本章中的图和清单4在原网站中没有,因此这里也没有,感兴趣的可以去原文补充.下面是译文. 至今为止,各个章节中独立的介绍了相关的技术--XUL.javascript.CS ...
- chrome扩展程序_如何创建Chrome扩展程序
chrome扩展程序 by Erika Tan 谭咏麟 如何创建Chrome扩展程序 (How to create a Chrome Extension) In this article, I wil ...
- linux ansible_17本技术书籍,4个出色的Firefox扩展,Linux技巧,Buildah,Ansible和其他热门阅读
linux ansible 上周,与Linux相关的文章在我们的前十名中占据了主导地位,但是到目前为止,我们针对Linux和开源爱好者的17本书的综述是我们最大的成功. 请继续阅读,以了解上周Open ...
- 编写Firefox扩展(翻译)
编写Firefox扩展 FireFox和Thunderbird有很好的扩展架构,你可以通过XML和ECMAScript结合的方式而不用通过编写C程序的方式来编写扩展 在这个Blog里面,我将会看看如何 ...
- 提高firefox扩展开发效率
本文介绍一些技巧和开发扩展中使用的工具,主要参考:https://developer.mozilla.org/En/Firefox_addons_developer_guide的第五章(Chapter ...
- Firefox扩展初接触
本文没涉及如何写一个扩展,而是简单整理一下扩展涉及到的周边的东西. 环境 Profile配置文件的默认位置: Windows %APPDATA%\Mozilla\ Unix/Linux ~/.mozi ...
- Firefox扩展安装
firefox扩展和chrome扩展非常相似,甚至兼容.因总结过chrome扩展的开发,这里不提,本篇谈谈firefox扩展的安装. 1.打包 所谓的打包,就是压缩,利用普通的右键压缩文件夹,这样形成 ...
- 对xxl-job进行simpleTrigger并动态创建任务扩展
2019独角兽企业重金招聘Python工程师标准>>> 博文原址:对xxl-job进行simpleTrigger并动态创建任务扩展 业务场景 需求上要求能实现quartz的simpl ...
最新文章
- javascript函数嵌套时arguments的问题
- CVPR2021|基于双边扩充和自适应融合方法的点云语义分割网络
- 反激式开关电源变压器设计
- python 网站文件下载-python从网站上下载东西
- Akka的Hello World(二)Akka的Actor生命周期
- python和perl哪个好_做为脚本语言来说perl和python那个更有优势?
- ABAP事务码SAT里的Gross time and net time
- 算法设计与分析——贪心算法——最优装载问题
- oracle thin和oci 区别
- Win10系统局域网中的其他电脑能Ping通但是无法访问本地IIS发布的网站
- web前端工程师学习路线指南,完整Web前端学习路线图
- 详解loadrunner的think time
- GCC 常见参数配置
- 详解Python序列解包(3)
- 学习iptables
- 关于html5毕业论文设计任务书,毕业论文设计任务书(精选多篇)
- 项目管理工具的选型(jira,teambition,worktitle,tower,trello,云效,禅道)和禅道的基本介绍...
- scala 如何读取 csv 文件
- 不了解干眼症?可能你早就被它盯上了!
- C语言课后问答题汇总
热门文章
- MainWindow.xaml.cs
- mysql里any是什么_【MySQL】mysql中any,in,some,all的区别
- 改装普通电脑为触屏电脑
- 学人工智能电脑主机八大件配置选择指南
- #730 (Div. 2) A 思维 C dfs D1 交互思维
- web前端开发技术 web课程设计 网页规划与设计web期末作业设计网页
- 微商的微信营销互动方法
- canvas制作旋转的太极图
- minSdk(API 26) deviceSdk(API 17)
- 数学术语——内积(inner product)