我正在尝试使用Firebreath框架开发浏览器插件。我想要实现的第一件事是使插件能够做traceroute。现在我在Windows7上这样做。目前我选择使用Win32API CreateProcess来调用命令shell。通过设置dwFlags = STARTF_USESHOWWINDOW,我可以在执行期间隐藏命令shell窗口。
问题: createProcess是在一个名为run()的方法中实现的,我在其中使用JS进行测试。当我调用plugin()。run()时,traceroute运行良好,并且输出已成功写入文本文件中。但是在执行期间,浏览器变得没有响应,最后插件在traceroute完成后崩溃了几秒钟。由于我是插件开发的新手,并且只对c ++有一点了解,我想知道为什么会出现这个问题。仅供参考,如果我没有隐藏命令窗口,那插件就很奇怪 - 浏览器在执行traceroute时响应。
答案 0 :(得分:1)
在任何NPAPI插件(使用FireBreath或其他方式)中,您都不会阻止主(javascript)线程,这一点非常重要。你想要做的事情可以通过几种方式完成;我可能会传入一个回调,启动一个新线程,在那里执行createprocess,然后在结果完成后触发js回调。
请参阅FireBreath Tips: Asynchronous Javascript Calls。
要注意的一件事是,如果插件在通话过程中关闭,您需要能够终止线程(和进程)。