最簡單最笨的操作步驟如下:
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
如何讓 JavaScript 傳參數給你的 plugin method 呢?
如果传入的参数都是中文等,采用上面的MultiByteToWideChar结尾部分就是乱码,这个是为什么呢?
对于英文和数字是正常的。乱码也仅仅是结尾之处。