firefox插件开发之新增导航工具栏按键

王正航 发布于 2013/09/22 12:58
阅读 954
收藏 4

1firefox插件目录结构

xpi文件

|-----install.rdf文件

|-----chrome.manifest文件

|-----chrome目录

|-----content目录

|-----mtkan.js文件

|-----mtkan.xul文件

|-----skin目录

|-----icon16.png文件

|-----icon40.png文件

2.文件说明

2.1 xpi文件

xpi文件是firefox插件文件,通过压缩工具生成zip包,然后修改zip文件名为xpi即可

2.2 install.rdf文件


<?xml version="1.0" encoding="UTF-8"?>
<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">
		<!-- Required Items -->
		<em:id>admin@mtkan.net</em:id>
		<em:name>每天看视频网插件</em:name>
		<em:type>2</em:type>
		<em:version>1.4</em:version>
		
		<em:iconURL>chrome://mtkan/skin/icon40.png</em:iconURL>
		<em:updateURL>https://www.mtkan.net/extension/firefox/update.rdf</em:updateURL>

		<em:targetApplication>
			<Description>
				<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
				<em:minVersion>4.0</em:minVersion>
				<em:maxVersion>26.0</em:maxVersion>
			</Description>
		</em:targetApplication>

		<!-- Optional Items -->
		<em:creator>admin of mtkan</em:creator>
		<em:description>每天看视频网插件,一键观看VIP视频,去视频广告</em:description>
		<em:homepageURL>http://www.mtkan.net/</em:homepageURL>

	</Description>
</RDF>
Description 下的节点


em:id节点:插件的ID,该ID应该是一个Email格式的字符串,或者是一个GUID。注意,使用Email的作用是保证该ID的唯一性,并不要求这个Email地址是有效的

em:name节点:插件名称(必须)

em:type节点:在这里的值必须是2。该标签说明该应用的Firefox插件,而不是其他XUL应用程序。Firefox插件的代码是2,如果是Firefox主题则会是4。(必须)

em:version:插件的版本号(必须)

em:iconURL:插件的图标,在附加组件管理器里显示(选填)

em:updateURL:插件升级地址(选填)

em:creator:作者(选填)

em:description:插件描述(选填)

em:homepageURL:插件首页地址,设置后在附加组件管理器里显示(选填)

 

em:targetApplication——Description下的节点

em:idFirefoxID,这个值不能改变(必须)

em:minVersion:支持该插件的浏览器最低版本(必须)

em:maxVersion:支持该插件的浏览器最高版本,在4.0以后版本该参数无效(必须)

2.3 chrome.manifest

content mtkan chrome/content/
overlay chrome://browser/content/browser.xul chrome://mtkan/content/mtkan.xul
skin mtkan classic/1.0 chrome/skin/

content :这里指明,请求类型是 content ,包名是 mtkan ,位置是相对于 chrome.manifest 文件的 chrome/content/ 。注意,这里的最后面一个 / 是不能缺少的。


overlay:这句是告诉Firefox,需要在chrome://browser/content/browser.xul加载的时候将chrome://mtkan/content/mtkan.xul扩展进来。

skin:指定mtkan插件的皮肤目录

2.4 mtkan.xul

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE overlay>
<overlay id="mtkanOverlay"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script type="application/x-javascript" src="chrome://mtkan/content/mtkan.js" />
    <toolbarpalette id="BrowserToolbarPalette">
        <toolbarbutton id="mtkanToolbarbutton" label="一键观看VIP视频,去视频广告" tooltiptext="一键观看VIP视频,去视频广告" oncommand="mtkan.redirectMtkan()" image="chrome://mtkan/skin/icon16.png" />
    </toolbarpalette>
</overlay>
 overlay 节点:自定义的一个展示元素


       id属性:展示元素的标识

       xmlnsxml命名空间,不能修改。

script:需要执行的js文件,存放在mtkan插件的content目录下的mtkan.js文件

toolbarpalette:定制工具栏

       id属性:不能修改

toolbarbutton:添加一个按键到定制工具栏

       id属性:按键的标识

       label属性:按键的标签

       tooltiptext属性:按键的提示信息

       oncommand:点击按键执行的操作:mtkan.redirectMtkan()。(在mtkan.js里定义的)

       imge:按键在定制工具栏里展示的图标

2.5 mtkan.js

var mtkan = {
	redirectMtkan: function() {
		var url = window._content.document.location.href.toString();
		var idx = url.indexOf('mtkan.net');
		if(idx != -1){
			return;
		}
		
		url = "http://www.mtkan.net/video/p/" + encodeURIComponent(url.split("//")[1]);
		window._content.document.location = url;
		window.content.focus();
	}
};

/**
 * Installs the toolbar button with the given ID into the given
 * toolbar, if it is not already present in the document.
 *
 * @param {string} toolbarId The ID of the toolbar to install to.
 * @param {string} id The ID of the button to install.
 */
function installButton(toolbarId, id) {
	if (!document.getElementById(id)) {
		var toolbar = document.getElementById(toolbarId);
		toolbar.insertItem(id, toolbar.lastChild);
		toolbar.setAttribute("currentset", toolbar.currentSet);
		document.persist(toolbar.id, "currentset");
		if (toolbarId == "addon-bar"){
			toolbar.collapsed = false;
		}
	}
}
window.addEventListener("load", function() {
  	installButton("nav-bar", "mtkanToolbarbutton");
    // The "addon-bar" is available since Firefox 4
    installButton("addon-bar", "mtkanToolbarbutton");
}, false);


3.插件在线升级

install.rdf文件中指定了升级的协议文件update.rdf

<?xml version="1.0"?>
<r:RDF xmlns:r="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns="http://www.mozilla.org/2004/em-rdf#">

<r:Description about="urn:mozilla:extension:admin@mtkan.net">
    <updates>
    <r:Seq>
    <r:li>
    <r:Description>
        <version>1.4</version>
        <targetApplication>
            <r:Description>
            <id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</id>
            <minVersion>4.0</minVersion>
            <maxVersion>26.0</maxVersion>
            <updateLink>http://www.mtkan.net/extension/firefox/mtkan.xpi</updateLink>
            <updateHash>sha1:d821cfd7e6e387470b537727ffa460353e15ddac</updateHash>
            </r:Description>
        </targetApplication>
    </r:Description>
    </r:li>
    </r:Seq>
    </updates>
</r:Description>

</r:RDF>

updateLink :升级插件的下载地址


updateHash:升级文件的hash

说明:install.rdf文件中的updateURLMozilla使用https而非http,否则你应该提供updateKey(可以用McCoy生成)

参考:

https://developer.mozilla.org/en-US/docs/Install_Manifests?redirectlocale=en-US&redirectslug=install.rdf#updateURL

https://developer.mozilla.org/en-US/docs/McCoy

    最后附带上示例中插件的完整下载地址:http://www.mtkan.net/extension/firefox/mtkan.xpi


加载中
返回顶部
顶部