firefox插件(plugin)開發概述

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函數,並從函數中獲取相應的值或者調置相關的值。
具體的例子有時間再加上,現在還在頭大中。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章