Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从NPAPI插件调用javascript函数_Javascript_Google Chrome_Dom_Npapi - Fatal编程技术网

从NPAPI插件调用javascript函数

从NPAPI插件调用javascript函数,javascript,google-chrome,dom,npapi,Javascript,Google Chrome,Dom,Npapi,我正在编写NPAPI插件来访问当前页面的DOM。我能够建立插件。现在 我想调用javascript函数console.debug(“hello from c++”);从NPAPI插件。我已经采取了以下代码 我正在使用谷歌的helloworld示例代码构建npapi插件: 代码: 但是在加载之后,当我调用test.html时,它会崩溃。 请让我知道“我在正确的地方调用此代码”和“我如何测试此代码” 谢谢…第一件事是第一件事:每当我在没有更多信息的情况下阅读“it崩溃”时,我都要稍微面对手掌。如果这

我正在编写NPAPI插件来访问当前页面的DOM。我能够建立插件。现在 我想调用javascript函数console.debug(“hello from c++”);从NPAPI插件。我已经采取了以下代码 我正在使用谷歌的helloworld示例代码构建npapi插件: 代码:

但是在加载之后,当我调用test.html时,它会崩溃。 请让我知道“我在正确的地方调用此代码”和“我如何测试此代码”


谢谢…

第一件事是第一件事:每当我在没有更多信息的情况下阅读“it崩溃”时,我都要稍微面对手掌。如果这就是你所知道的,那么你很快就停止了故障排除。有可能会有所帮助,但如果在连接调试器时让它崩溃,则应该找出它崩溃的位置以及崩溃的原因

我还想提醒您,在生产环境中尝试执行您正在执行的操作时,我遇到了一些严重的性能问题;不要将此作为主要的日志记录方法!这还不够快

也就是说,我认为你的方法在很大程度上没有任何内在的错误。可能是您的(大概是全局的)
npp\uu
无效,或者您的字符串可能需要由NPN\u MemAlloc分配的内存组成;我知道如果你要返回它,那么它就需要返回,但我认为当你调用一个新函数时,它不需要返回;不过,这是值得尝试的

如果我是你,我的下一步将是附加一个调试器并查看崩溃的位置。要做到这一点,最简单的方法可能是关闭firefox中的插件ipc,这样您就可以轻松地连接到进程,但也可以找到正确的进程并连接到它(有关详细信息,请参阅我前面链接的调试页面)

谢谢taxilian

你的建议有帮助。我已经调试了chrome.exe并发现了npnfuncs结构的问题。空结构是导致问题的原因。因此,很少有代码更改有助于解决此问题。chrome可以使用调试(对于可能想尝试的其他人)

C:\ProgramFiles\Google\Chrome\Application>Chrome.exe——插件启动对话框——等待调试器

bool ScriptablePluginObject::Invoke(NPObject* obj, NPIdentifier methodName, const NPVariant* args,uint32_t argCount, NPVariant* result) 
{   
   // The message i want to send.
   char* message = "Hello from C++";

   // Get window object.
   NPObject* window = NULL;
   NPN_GetValue(npp_, NPNVWindowNPObject, &window);

   // Get console object.
   NPVariant consoleVar;
   NPIdentifier id = NPN_GetStringIdentifier("console");
   NPN_GetProperty(npp_, window, id, &consoleVar);
   NPObject* console = NPVARIANT_TO_OBJECT(consoleVar);

   // Get the debug object.
   id = NPN_GetStringIdentifier("debug");

   // Invoke the call with the message!
   NPVariant type;
   STRINGZ_TO_NPVARIANT(message, type);
   NPVariant args[] = { type };
   NPVariant voidResponse;
   NPN_Invoke(npp_, console, id, args,sizeof(args) / sizeof(args[0]),&voidResponse);

   // Cleanup all allocated objects, otherwise, reference count and
   // memory leaks will happen.
   NPN_ReleaseObject(window);
   NPN_ReleaseVariantValue(&consoleVar);
   NPN_ReleaseVariantValue(&voidResponse);
}