NPAPIをざっくりやってみる (3)

2013-01-28T00:00:00+00:00 C++ NPAPI

NPAPIでは

<object id="plugin" type="application/hoge-plugin">
  <param name="text" value="AAA" />
</object>

な感じでHTML側でプラグイン参照定義する訳なんだが、<object>に指定されている属性と値、更にそこから内包される<param>等の値を利用したい場合にはNPPluginFuncs.newpで参照されるNPP_New等で行う事が出来る模様(<embed>では内包される<param>が認識しない模様)

NPError NP_Initialize(NPNetscapeFuncs* bFuncs, NPPluginFuncs* pFuncs) {
  loga("NP_Initialize");

  ppFuncs = bFuncs;

  pFuncs->newp = NPP_New;
  pFuncs->getvalue = NP_GetValue;

  return NPERR_NO_ERROR;
}

NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* saved) {

  loga("NPP_New");

  int i;

  map<string, string> params;

  for (i = 0; i < argc; i++) {
    params[argn[i]] = argv[i];
  }

  cerr << "size: " << params.size() << endl;
  cerr << "id: " << params["id"] << endl;
  cerr << "type: " << params["type"] << endl;
  cerr << "text: " << params["text"] << endl;


  return NPERR_NO_ERROR;
}

な感じでNPP_Newに指定されている引数にバインドされる模様なので、それを利用して取得する事が可能な模様。上記したHTMLの場合

size: 3
id: plugin
type: application/hoge-plugin
text: AAA

というようなアウトプット結果が得られる

gradleのJavaExec zombie.js