1

私はNPAPIでサファリプラグインを書いています。NPAPIプラグイン(FireBreathを使用しない)からJavaScriptに整数を返すにはどうすればよいですか?javascript:

<html>
<head>
<script>
function run() {
    var plugin = document.getElementById("pluginId");
    var number = plugin.getBrowserName();
    alert(number);
}
</script>
</head>
<body >
<embed width="0" height="0" type="test/x-open-with-default-plugin" id="pluginId">
<button onclick="run()">run</button>
</body>
</html>

プラグインコード:

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) {
// Make sure the method called is "open".
NPUTF8 *name = browser->utf8fromidentifier(methodName);
if(strcmp(name, plugin_method_name_getBrowserName) == 0) {
  //what can i do here?
}
return true;

}

plugin.getBrowserName()から数値を返す方法は?

Plzヘルプ!

私はこのスレッドを見つけました:NPAPIプラグインからJavaScriptに整数/文字列を返します(FireBreathを使用していません)が、これらのコードがどこにあるのかわかりません

char* npOutString = (char *)pNetscapefn->memalloc(strlen(StringVariable) + 1);
if (!npOutString) return false; strcpy(npOutString, StringVariable); 
STRINGZ_TO_NPVARIANT(npOutString, *result);

置く。

4

1 に答える 1

2

http://npapi.com/tutorial3を見たことがありますか?

戻り値はNPVariant*の結果に含まれます。NPVariantのドキュメントを見ると、さまざまなタイプのデータのタイプと和集合があることがわかります。あなたが話している文字列コードは、あなたの「//ここで何ができますか?」の代わりになります。コメント。整数を返すには、次のようにします。

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) {
// Make sure the method called is "open".
NPUTF8 *name = browser->utf8fromidentifier(methodName);
if(strcmp(name, plugin_method_name_getBrowserName) == 0) {
  result->type = NPVariantType_Int32;
  result->intValue = 42;
}
return true;

次のように、* _ TO_NPVARIANTマクロ(上記のリンクでNPVariantドキュメントに記載されています)を使用することもできます。

bool plugin_invoke(NPObject *obj, NPIdentifier methodName, const NPVariant *args, uint32_t argCount, NPVariant *result) {
// Make sure the method called is "open".
NPUTF8 *name = browser->utf8fromidentifier(methodName);
if(strcmp(name, plugin_method_name_getBrowserName) == 0) {
  INT32_TO_NPVARIANT(42, *result);
}
return true;

INT32_TO_NPVARIANTマクロのソースを見ると、上記と同じことを実行していることがわかります。したがって、この2つは同等です。

于 2012-12-06T17:16:30.103 に答える