2012-02-08 77 views
0

我正在嘗試使用Firebreath框架開發瀏覽器插件。我想要實現的第一件事是使插件能夠執行traceroute。現在我正在Windows7上做這件事。目前我選擇使用Win32API CreateProcess來調用命令shell。通過設置dwFlags = STARTF_USESHOWWINDOW,我可以在執行期間隱藏命令shell窗口。在FireBreath框架中使用Win32 API CreateProcess

問題: createProcess是在run()方法中實現的,我使用JS調用它進行測試。當我調用plugin()。run()時,traceroute運行良好,輸出按照我的意願成功寫入文本文件。然而,在執行過程中,瀏覽器無響應,最後在traceroute完成後,插件崩潰。由於我是插件開發新手,對C++只有一點認識,所以我想知道爲什麼會出現這個問題。僅供參考,如果我沒有隱藏命令提示符窗口,插件的工作原理就是奇蹟 - 瀏覽器在traceroute執行時是響應式的。

回答

1

在任何NPAPI插件(帶FireBreath或其他)中,您都不會阻止主(javascript)線程,這一點非常重要。你想要做的事可以通過幾種方式來完成;我可能會傳入一個回調,啓動一個新線程,在那裏執行createprocess,然後在結果結束時觸發js回調。

參見FireBreath Tips: Asynchronous Javascript Calls

需要注意的一件事是,如果插件在通話期間關閉,您需要能夠終止線程(和進程)。