So Tired!_! for our good life, must to do something. let's do it!

21五/10

如何為你的 firefox plugin 加上新的 method

发布在 Nick Xu

最簡單最笨的操作步驟如下:

Step 1: 加入 method 名稱標記
    在 plugin.cpp 中的 CPlugin method 中加入 method 的標記

ex:
    CPlugin::CPlugin(NPP pNPInstance) ..{

            MYfunction_id=NPN_GetStringIdentifier("MYfunction");
    }

Step 2: 宣告 method 名稱標記 

ex:
    static NPIdentifier MYfunction_id;

Step 3: 告訴別人你的元件有這個 method
ex:
    bool ScriptablePluginObject::HasMethod(NPIdentifier name){
        if(name == MYfunction_id)
            return true;
    }

Step 4: 當 script 呼叫你的 method 時, 提供你 method 的實做

ex:
    bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args,uint32_t argCount, NPVariant *result) {
          DWORD dwThreadID;

         if(name == MYfunction_id ){
            MessageBox(NULL,L"呼叫 MYfunction_id",L"Java Script 呼叫範例",MB_OK);
            return PR_TRUE;
          }

          return PR_FALSE;
    }

如何讓 JavaScript 傳參數給你的 plugin method 呢?

如果 Java Script 呼叫的 method 有參數, 我們要如何取出參數資料呢
例如:
    Myfunction("192.168.0.1",1234);

=== in Invoke method ===
// 第一個參數: "192.168.0.1"
    NPVariant varIP=args[0];
    NPString npstrIP=NPVARIANT_TO_STRING(varIP); // 取出 "192.168.0.1"
    // 印出來看看: 將 utf8 字串 轉成 Wide Char
    int   length=MultiByteToWideChar(CP_UTF8,0,(char*)npstrIP.utf8characters,-1,NULL,0);
    TCHAR *strIP=new TCHAR[length];
    MultiByteToWideChar(CP_UTF8,0,(char*)npstrIP.utf8characters,-1,strIP,length);
    MessageBox(NULL,strIP,_T("呼叫 funPassVar_id: 第一個參數n"),MB_OK);
    delete[] strIP;

    // 第二個參數: 1234
    NPVariant varValue=args[1];
    int32_t value=NPVARIANT_TO_INT32(varValue);

    //印出來看看: 印出 int32 的內容
    TCHAR msg[100];
    _stprintf(msg,_T("value=%d"),value);
    MessageBox(NULL,msg,_T("呼叫 funPassVar_id: 第二個參數n"),MB_OK);
=============================================

希望對你有幫助.

by Jing

21五/10

如何让Firefox Plugin可以在网页中自动安装

发布在 Nick Xu

打包plugin作为xpi(zip)文件

Step 1: 先把你那一堆 dll (包含 np開頭的 dll) 放進 plugins 目錄裡面

snap003

Step 2: 撰寫 install.rdf (安裝描述檔), 放在如上圖的相對位置

ex: 反正照抄就對了 (注意 em:id, em:name 要改成你的名字)

snap003

詳細格式說明: https://developer.mozilla.org/en/Install.rdf

Step 3: 產生 Firefox 自動安裝檔 -- xpi 檔

只要下達這個指令即可:

jar cvfM 你的檔案.xpi -C ./ *.*

(注意:

1. xpi 其實是 ZIP 檔,可是有些壓縮工具(如: 7-zip) 會對內容作排序 , 所以反而造成無法安裝.

2. 如果你不知道什麼是 jar 的話, 最簡單的方法就是去下載 JDK, 然後設定下環境變數 Path. (下載JDK)

)

通常我都會寫一個 批次檔 make_xpi.bat, 把上面的指令放進去, 然後滑鼠 double-clicked!!

所以 makexpi.bat 的相對位置 與產生的 xpi 檔, 展示如下:

snap003

Step 4: 完成

在任意网页使用xpi(zip)文件

測試

Step 1: 測試網頁 test.html

snap003

Step 2: 如果使用者沒安裝你的 plugin, 那長相應該是這樣

snap003

Step 3: 使用者點選那個看起向樂高積木的東西後, Firefox 會到網路上尋找你的 plugin

(因為你還沒上網註冊, 所以一定會找不到的 )

snap003

Step 4: 接下來, 由網頁建議位置下載 剛剛建立好的 xpi 檔

snap003

Step 5: 安裝成功, 點選 Restart Firefox

snap003

接下來 , Extension Manager 會自動管理你的 plug-in

snap003

Step 6: Firefox 正確執行你的 plug-in

snap003

注册xpi(zip)文件

上網註冊你的 Plugins

Step 1: 先到 Firefox 網站註冊

網址: https://addons.mozilla.org/en-US/firefox/users/login?to=en-US%2Ffirefox%2Fbrowse%2Ftype%3A7

snap003

Step 2: 選 Developer Tool

snap003

Step 3: 選左邊的 Submit Add-on

snap003

Step 4: Upload 你的 xpi 檔

snap003

Step 5: 接下來等待核准, 整個處理的流程如下

snap003

詳細說明: https://addons.mozilla.org/zh-TW/firefox/pages/sandbox

Step 6: 檢視放在 Sandbox 的 plugins

snap003

Step 7: 完成

希望對你有幫助!

   
site
site