下面是我试图从javascript中做的事情:
var result;
result = document.myplugin.GetClientName();
document.write(result);"GetClientName“应该使用字符串将NPVariant返回到浏览器。我得到了我的输出,并将垃圾附加到末尾。
有没有人对如何解决这个问题有任何建议?
发布于 2011-03-08 06:59:34
嗯..。做得对吗?您没有提供任何示例代码,也没有说明如何分配NPVariant;这使您很难帮助您,我的朋友。
基本上,您只需要创建一个NPVariant,使用MemAlloc为它分配足够的内存,并将指向NPVariant联合内NPString的UTF8Characters字段的指针和长度分配给UTF8Length。
确保分配内存并复制字符串;如果您试图从std::string或其他东西传入内存,则很可能在使用它之前释放它,这很容易导致问题。还记得在字符串的末尾为空字符分配一个额外的字节--记住C字符串是空终止的,尽管NPAPI规范说您只需要设置UTF8Length,但我仍然看到火狐特别期望一个空终止字符串,如果不给它,行为会很奇怪。
如果你想走这条路,你可能会发现这个博客文章很有帮助:
不过,我可以建议一条更简单的路线吗?编写NPAPI插件并不是一件简单的事情,它需要大量的经验和研究才能做好和安全地完成它。如果您使用FireBreath,您可以在C++框架上编写NPAPI,该框架已经为您完成了所有这些工作,并允许您使用普通的C++ STL数据类型,在多个平台上工作,并且通常可以节省大量时间和麻烦。
有关FireBreath与脚本一起使用的方法的一些信息,请参阅我的博客上关于这个主题的文章。
https://stackoverflow.com/questions/5228917
复制相似问题