以下是我想通过javascript做的事情:
var result;
result = document.myplugin.GetClientName();
document.write(result);
“GetClientName”应该使用字符串将NPVariant返回给浏览器。我将输出的垃圾附加到最后。
有没有人对如何解决这个问题有任何建议?
答案 0 :(得分:2)
基本上你只需要创建一个NPVariant,使用NPN_MemAlloc为它分配足够的内存,并将指针分配给NPVariant联合内NPString的UTF8Characters字段和UTF8Length的长度。
确保分配内存并复制字符串;如果你试图从std :: string中传入内存,或者在你使用之前它可能会被释放,这很容易引起问题。还记得在字符串的末尾为NULL字符分配一个额外的字节 - 记住C字符串是NULL终止的,虽然NPAPI规范说你只需要设置UTF8Length,我仍然看到Firefox的情况特别是期望一个以NULL结尾的字符串,并且如果你不给它一个就行为很奇怪。
如果您想采用这条路线,您可能会发现此博文有用:
但是,我可以建议一个更简单的路线吗?编写NPAPI插件并不是一件简单的事情,需要大量的经验和研究才能做到安全。如果您使用FireBreath,您可以在C ++框架上编写NPAPI插件,该框架已经为您完成了所有这些,并允许您使用普通的C ++ STL数据类型,可以在多个平台上运行,并且通常可以为您节省大量时间和麻烦。
有关FireBreath使用脚本的方法的一些信息,请参阅my blog post on the subject。