本文没涉及如何写一个扩展,而是简单整理一下扩展涉及到的周边的东西。
环境
Profile配置文件的默认位置:
Windows | %APPDATA%\Mozilla\ |
Unix/Linux | ~/.mozilla |
为了不影响正常Firefox的使用,用来测试插件或扩展应该使用不同的Profile配置
使用新的Profile文件
通过
firefox -no-remote -P testplugin
可以启动让firefox使用名为testplugin的Profile配置,如果这个配置尚不存在,则会弹出对话框,我们可以点击创建。此时可以自己定义名字和选择目录
-no-remote的含义是开启一个新的实例(进程?),而不是在当前的实例中新开一个窗口。具体参数信息可以通过
firefox --help
获得。
现在 ~/.mozilla/firefox下有以下内容:
4bn7669x.default/ av24yatw.testplugin/ Crash Reports/ profiles.ini
修改Firefox配置
在地址栏输入about:config,修改以下参数的值
javascript.options.showInConsole = true | 将chrome文件中的错误显示在Console里。 |
nglayout.debug.disable_xul_cache = true | 关闭XUL缓存,这允许不重启而改变窗口以及对话的内容。 |
browser.dom.window.dump.enabled = true | 这将允许dump()函数输出到stdout里。 |
javascript.options.strict = true | 启用严格JavaScript错误提示。 |
extensions.logging.enabled = true | 这将给出更多关于安装以及更新插件的信息。 |
某些项可能不存在,可以在页面点击右键,添加。
也可以直接修改Profile文件夹下的prefs.js文件
- ~/.mozilla/firefox/av24yatw.testplugin/prefs.js
user_pref("nglayout.debug.disable_xul_cache",true); user_pref("browser.dom.window.dump.enabled",true);
如果这个文件不存在,可以直接创建。
扩展的位置
假定我们已经有了一个扩展(文件夹或者.xpi文件),那么放到哪儿才能被firefox找到呢?
位置一
- Windows
%APPDATA%\Mozilla\Extensions\{ec8030f7-c20a-464f-9b0e-13a3a9e97384}\
- liunx
/usr/lib/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-3a3a9e97384}/ ~/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}/
位置二
针对某个特定的Profile配置:
- Windows
%APPDATA%\Mozilla\Firefox\4bn7669x.default\Extensions\
- Linux
~/.mozilla/firefox/4bn7669x.default/extensions/
位置三
Firefox安装目录下的
distribution/extensions/
子目录
如何放置?
位置有了,如果扩展该如何放置呢?命名有无要求?
每一个扩展都有一个install.rdf文件,该文件内有一个该扩展的ID(是一个uuid或者email地址)
<em:id>helloworld@mozilla.doslash.org</em:id>
1. 如果我们将扩展的文件夹直接放置到前面提到的位置。那么文件夹名需要和该ID完全一致
helloworld@mozilla.doslash.org
2. 可以将该扩展其打包成.zip文件(后缀改为.xpi,标准的扩展安装文件?),放置到前面提及的位置
helloworld@mozilla.doslash.org.xpi
3. 我们可以将插件随便放置到一个其他位置,然后在前述位置下放置一个文本文件
helloworld@mozilla.doslash.org
其内容为我们插件所在的具体文件夹的路径。
第三种方法和前面的位置二应该是编写扩展时最常用的。
扩展的结构
├─install.rdf ├─chrome.manifest ├─content/ ├─skin/ └─locale/
- install.rdf
对扩展来说,这是最重要的一个文件。它指定了扩展的名字,ID,版本等等信息
- chrome.manifest
这个文件也是必须的,它告诉Firefox该扩展提供了哪些内容。这部分东西通常会打包成一个jar文件(也是一个普通的.zip文件)
- content/ skin/ locale/ ...
这些不是必须的,但大部分扩展都是这么组织内容的:
content | 包含该扩展的UI和逻辑 |
skin | CSS 和一些图片(其他人可以提供新的皮肤) |
locale | locale相关的文件,比如翻译等 (其他人可以提供翻译) |
chrome
如前所述,chrome有3部分组成
- chrome.manifest
content helloworld content/ locale helloworld en-US locale/en-US/ skin helloworld classic/1.0 skin/
访问这些文件时,通过chrome协议
chrome://packagename/section/path/to/file
比如:chrome://helloworld/content/overlay.xul
参考
-
https://developer.mozilla.org/en/XUL_School/The_Essentials_of_an_Extension
-
http://yp.oss.org.cn/software/show_resource.php?resource_id=21