0

npapi と chrome を使用してタグ名で dom 要素を取得しようとしていますが、結果の長さは常にゼロです。

    NPVariant tagName;  
    STRINGZ_TO_NPVARIANT("input", tagName);  
    NPVariant inputCollection;
    if(!NPN_Invoke(m_pNPInstance, doc,NPN_GetStringIdentifier("getElementsByTagName"), &tagName, 1, &inputCollection))
    {
        outLog<<"get input error"<<endl;
    }
    NPVariant npvlength;
    if (NPN_GetProperty(m_pNPInstance, NPVARIANT_TO_OBJECT(inputCollection), NPN_GetStringIdentifier("length"), &npvlength))
    {
        outLog<<npvlength.type<<"," <<npvlength.value.intValue<<endl;
    }

npvlength.value.intValue は常に 0 ですが、要素を取得しようとすると問題ありません。要素とそのプロパティを取得できます。

        NPVariant index;
        INT32_TO_NPVARIANT(0, index);

        NPVariant Item;
        if (NPN_Invoke(m_pNPInstance, NPVARIANT_TO_OBJECT(inputCollection), NPN_GetStringIdentifier("item"), &index, 1, &Item))
        {
            NPVariant typeVal;
                if (NPN_GetProperty(m_pNPInstance, NPVARIANT_TO_OBJECT(Item), NPN_GetStringIdentifier("type"), &typeVal))
               {
                   outLog<<NPVARIANT_TO_STRING(typeVal).UTF8Characters<<endl;
               }
        }
4

1 に答える 1

1

あなたはそれが実際にそうNPVariantType_Int32ではないと確信していNPVariantType_Doubleますか?

特にクロスブラウザでは、それがどちらかであることに依存するべきではありません (どちらが実際にnumber値に使用されるかは未定義です)。代わりに、変換にヘルパーを使用します。

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-07-25T12:28:18.190 に答える