其它 · 2010-05-21

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

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

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