http://blog.csdn.net/fancycow/article/details/7261191

firefox的插件分两种类型,一种extension,叫扩展,一种是plugin,我们叫插件.两种是完全不同的两个东西。extension相对来说简单很多,用的主要是XUL,只是xml的一个变相。而plugin相对来说复杂一些。具体的官网说明如下https://developer.mozilla.org/en/Gecko_Plugin_API_Reference
一、 插件的标准
  1、在windows平台,火狐的插件是以动态库形式(dll)存在的,并只去识别在其安装目录下plugins文件夹下的dll;
  2、dll的名是以8.3原则来命名的,即其名字所包含的字符不超过8个字符且以dll结尾的文件,还有一个规定就是其名字必须以np开头,例如:npXXX.dll,而XXX不超过六个字符;
  3、dll是属于MIME(一种标准)类型,要不火狐浏览器不认识他;
  4、dll导出的函数必须是NP_GetEntryPoints、NP_Initialize、NP_Shutdown是这三个,这是火狐浏览器能够识别的在个接口,具体说明在插件的生命周期中说明。
二、 插件的生命周期
  1、 第一次打开含量有插件的页面时,浏览器最先调用NP_GetEntryPoints作为调用插件的入口,此方法也只在第一次加载插件时调用。
  2、 调用NP_GetEntryPoints后,浏览器会调用NP_Initialize初始化插件,NP_Initialize只在第一次调用时被浏览器调用,与NP_Initialize配对的是NP_Shutdown,NP_Shutdown是在关闭了所有含有该插件的页面后被浏览器调用,在生命周期内也只被调用一次
  3、 调用NP_Initialize后,浏览器会调会NPP_New来创建一个插件实例,每打开一个页面都会调用NPP_New一次来创建一个插件实例,与NPP_New配对的是NPP_Destory,在每关闭一个页面都会调用NPP_Destory来释放NPP_New创建的实例
  4、 调用NP_Initialize后,一般会调用NPP_SetWindow来调置窗口,对于没有窗口的插件当然不用调用。
注:火狐插件开发的sdk划分为两类接口,一类是与插件相关的,以NPP或者NP开头的;一类是与浏览器相关的,以NPN开头的。
三、 页面调用插件的方式
 1、 通过object方式调用:与IE调用ActiveX控件的方式一样的,不同的是IE调用ActiveX控件是通过ClassID来标识的,而火狐的控件是通过MIME的值来标识。
 2、 通过embed方式调用:与object方式类似,但操作方面简单一些
四、 插件与页面的信息传递
插件与页面的信息是通过插件的接口与JS进行信息传递。在火狐插件有一类接口可以直接读取页面的JS函数,并从函数中获取相应的值或者调置相关的值。
具体的例子有时间再加上,现在还在头大中。。。。

fw: firefox plugin的更多相关文章

  1. FireFox Plugin编程

    9 jiaofeng601, +479 9人支持,来自 Meteor.猪爪.hanyuxinting更多   本文通过多图组合,详细引导初学者开发NPAPI的浏览器插件. 如需测试开发完成的插件请参考 ...

  2. Firefox开发

    官方文档 First extension 目录结构 ➜ firefox tree . └── borderify └── manifest.json // 必须 directory, files ma ...

  3. firefox插件Firebug的使用教程

    什么是Firebug 从事了数年的Web开发工作,越来越觉得现在对WEB开发有了更高的要求.要写出漂亮的HTML代码:要编写精致的CSS样式表展示每个页面模块:要调试 javascript给页面增加一 ...

  4. Zotero 使用指南

    DownLoad Page: https://onedrive.live.com/redir?resid=5084666E7B16AA85!109&authkey=!ABHQp7yfMnLpE ...

  5. selenium--大家庭介绍

    安装好配置环境后,开始我的selenium之旅.简单的了解一下色,selenium大家庭的组成. Selenium是ThoughtWorks专门为 Web 应用而开发的功能测试工具.Selenium使 ...

  6. ovirt user guide

    Contents [hide]  1 ⁠Accessing the User Portal 1.1 Logging in to the User Portal 1.2 Logging out of t ...

  7. (转)轻量级数据库 SQLite

    SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...

  8. 安裝 Rails 開發環境

    安裝 Rails 開發環境 Give someone a program, you frustrate them for a day; teach them how to program, you f ...

  9. 5 个免费的受欢迎的 SQLite 管理工具【申明:来源于网络】

    5 个免费的受欢迎的 SQLite 管理工具 包含内容: SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是 ...

随机推荐

  1. css禁用鼠标点击事件

    css禁用鼠标点击事件 .disabled { pointer-events: none; } <div class="main-container disabled"> ...

  2. Networking in too much detail

    The players This document describes the architecture that results from a particular OpenStack config ...

  3. HackerRank "The Indian Job"

    A sly knapsack problem in disguise! Thanks to https://github.com/bhajunsingh/programming-challanges/ ...

  4. Python基础教程【读书笔记】 - 2016/7/19

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第八波:第4章  字典:当索引不好用时 将学到一种通过名字引用值的数据结构,这种结构类型称为映射mapping.字典是P ...

  5. Windows2008 Patching(打补丁)

    我们都知道Windows的服务器都需要打补丁的,要不然漏洞那个叫多啊.Windows的系列服务器打补丁无非就是两种方法: 1. 通过Internet打补丁: Go to control Panel-& ...

  6. Spring进阶之路(1)-Spring核心机制:依赖注入/控制反转

    原文地址:http://blog.csdn.net/wangyang1354/article/details/50757098 我们经常会遇到这样一种情景,就是在我们开发项目的时候经常会在一个类中调用 ...

  7. 黄聪:使用$.getJSON解决ajax跨域访问 JQuery 的跨域方法(服务器端为wordpress程序)

    客户端: <input id="cat" name="cat" type="hidden" value="<? ech ...

  8. Linux Deepin 2014安装Lenovo LJ2600D驱动

    双11老师给实验室抢了个Lenovo LJ2600D的USB接口打印机,并用旧的HP-1080MFP网络打印服务器连接上了.Windows下就不多说了,官方给的驱动就是针对它的,同学们都用得爽爆了,因 ...

  9. js实现未知宽高的元素在指定元素中垂直水平居中

    js实现未知宽高的元素在指定元素中垂直水平居中:本章节介绍一下如何实现未知宽高的元素在指定元素下实现垂直水平居中效果,下面就以span元素为例子,介绍一下如何实现span元素在div中实现水平垂直居中 ...

  10. python 多线程抓取动态数据

    利用多线程动态抓取数据,网上也有不少教程,但发现过于繁杂,就不能精简再精简?! 不多解释,直接上代码,基本上还是很好懂的. #!/usr/bin/env python # coding=utf-8 i ...