1

javascript関数から渡された値をhtmlページに出力する必要がある単純なnapapiプラグインを書いています。しかし、私はそれをしている間に問題に直面しています。Firefoxで正しく動作します。しかし、私はqtfancybrowserの例でそれをやりたいと思います。javascriptコードでどのような値を渡しても、出力される値は常に0です。

javascriptコードは次のとおりです。

<html>
.....
<script>
function process_data()
{
    PluginObject = document.getElementById("Object");
    var i =100;
    if(PluginObject){
        ret = PluginObject.process_Data(i); 
    }
}
</script>
....
</html>

プラグインコードは次のとおりです。

.....
bool ScriptableObject::process_Data(const NPVariant* args, uint32_t argCount, NPVariant* result)
{
    printf(" process_Data\n");
    printf("\t argCount : %d\n",argCount);

    int tempi =args[0].value.intValue; 
    int tempf =args[0].value.doubleValue; 

        printf("type: %d type: %u\n",args[0].type,args[0].type);
    printf("tempi : %d tempf : %f\n",tempi,tempf);
}
......

出力は次のとおりです。

process_Data
     argCount : 1
type: 4 type: 4
tempi : 0 tempf : 0.000000

実際には、javascriptからvariで渡された値である100を出力する必要があります。

任意の提案/コメントは大歓迎です

前もって感謝します

4

2 に答える 2

1

Int32NPAPI メソッドに数値引数を提供する場合、またはバリアントを受け取るかどうかは未定義Doubleであるため、コードで両方のケースを処理する必要があります。
さらに、NPVARIANT_TO_*マクロはそれぞれの値を抽出するだけで、変換は行いません。

任意の数値引数から整数を抽出するには、次のような独自のコードを作成する必要があります。

bool convertToInt(const NPVariant& v, int32_t& out) {
  if (NPVARIANT_IS_INT32(v)) {
    out = NPVARIANT_TO_INT32(v);
    return true;
  }

  if (NPVARIANT_IS_DOUBLE(v)) {
    out = NPVARIANT_TO_DOUBLE(v);
    return true;
  }

  // not a numeric variant
  return false;
}
于 2013-02-02T14:09:48.497 に答える
-1

ここからhttp://code.google.com/p/chromium/issues/detail?id=68175とここからhttps://bugs.webkit.org/show_bug.cgi?id=49036 WEBのバグだと理解していますキットなので、「npruntime.h」に次を追加します。

#define FIX_WEB_KIT_INT32_BUG

#ifdef FIX_WEB_KIT_INT32_BUG
    #define NPVARIANT_IS_INT32(_v)   ((_v).type == NPVariantType_Int32 || (_v).type == NPVariantType_Double)
    #define NPVARIANT_TO_INT32(_v)   ((_v).type == NPVariantType_Double ? (_v).value.doubleValue : (_v).value.intValue)
#else
    #define NPVARIANT_IS_INT32(_v)   ((_v).type == NPVariantType_Int32)
    #define NPVARIANT_TO_INT32(_v)  (_v).value.intValue)
#endif

Web では (javascript から)、プラグインに渡されるすべての int 値に parseInt(myVal,10) を使用します。Google Chrome と Safari で確認してください。

于 2012-10-24T16:09:04.640 に答える