NPN_Invoke getElementsByTagName Not Work

Я пытаюсь получить элементы dom по тэгу, используя npapi с хромом, но длина результата всегда равна нулю.

    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;
}
}

0

Решение

Вы уверены, что это на самом деле 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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]