Вызов API Javascript из DLL-библиотеки NPAPI - PullRequest
0 голосов
/ 26 марта 2012

Я пишу расширение для Google Chrome, в котором используется библиотека NPAPI.В методе вызова библиотеки NPAPI я вставил следующий код, чтобы напечатать сообщение на консоли javascript:

char* message = "Hello from C++";</p> <pre><code>// Get window object. NPObject* window = NULL; npnfuncs->getvalue(thisObj->npp, NPNVWindowNPObject, &window); // Get console object. NPVariant consoleVar; NPIdentifier id = npnfuncs->getstringidentifier("console"); npnfuncs->getproperty(thisObj->npp, window, id, &consoleVar); NPObject* console = NPVARIANT_TO_OBJECT(consoleVar); // Get the debug object. id = npnfuncs->getstringidentifier("log"); //console. // Invoke the call with the message! NPVariant type; STRINGZ_TO_NPVARIANT(message, type); NPVariant args[] = { type }; NPVariant voidResponse; bool didRun = npnfuncs->invoke(thisObj->npp, console, id, args, sizeof(args) / sizeof(args[0]), &voidResponse); if (!didRun) assert(false); // Cleanup all allocated objects, otherwise, reference count and // memory leaks will happen. npnfuncs->releaseobject(window); npnfuncs->releasevariantvalue(&consoleVar); npnfuncs->releasevariantvalue(&voidResponse);

Ничто не являетсяраспечатывается на консоль, и ни один из них не является ошибочным.Я не уверен, есть ли проблема с моими операторами console.log, поскольку они ничего не печатают, даже когда я использую их с другими файлами javascript.Я хочу использовать выражение типа alert("Hello, world!") вместо этого на данный момент.Я мог бы изменить свой код так, чтобы он вызывал функции вида x.y(), но я не понимаю, как мне следует отображать окно с предупреждением.Я использовал учебник по следующей ссылке .Что я должен сделать, чтобы отобразить окно предупреждения, вызываемое из библиотеки NPAPI?

Редактировать: я могу вызвать предупреждение, используя его форму window.alert("") (X.Y() form), но это все еще не решаетмоя проблема.Я до сих пор не понимаю, как мне вызывать функцию типа X() непосредственно из NPAPI.

1 Ответ

0 голосов
/ 27 марта 2012

Нашли это!Я не смог найти конкретный метод для вызова функции типа X().Вместо этого я смог назвать его window.X(), поместив определение функции X() на страницу background.html расширения.Итак, если бы я создал функцию function myAlert(message){alert(message);} и поместил ее в background.html, я мог бы вызвать window.myAlert(argument) из NPAPI, и вышеперечисленная функция была бы вызвана.

...