2012-02-02 71 views
2

我有一些處理輸入文件並輸出HTML和/或SVG的數據分析代碼。它是C++和CPU密集型的。Native Client模塊可以呈現由C++代碼生成的HTML嗎?

我想創建一個瀏覽器插件,以便我的代碼可以在不離開瀏覽器的情況下使用。 Google的Native Client框架和Pepper API聽起來很有趣,但也許有點過於嚴格。從Native Client模塊可以通過Pepper執行以下操作?

  1. 訪問用戶文件系統上的本地文件。我知道NaCl沙盒 通常會阻止這種情況,但肯定有辦法將用戶選擇的文件從Javascript層傳遞到NaCL?

  2. 將HTML或SVG輸出回瀏覽器。有什麼方法可以讓C++修改包含文檔的DOM?

回答

4

我對(1)不太確定,但是(2)絕對不是直接可能的。

對於(1),Pepper API應該允許文件選擇器使文件可用於NaCl模塊,這與WebFS允許其用於JavaScript的相同方式相同。我不確定這個的實現狀態。對於(2),C++代碼不能直接操作DOM,因此不能直接操作DOM。但是,NaCl模塊可以使用PostMessage接口將字符串發送到JavaScript代碼,然後可以執行實際的DOM操作。請注意,在Chrome中,NaCl模塊是事件處理程序。這意味着如果計算是由某個事件啓動並同步運行(並且是CPU密集型的),則會導致瀏覽器失去交互式響應能力,或者變得非常笨拙,因爲事件處理器會花費太長時間才能返回。更好的方法是產生後臺線程來完成事件處理程序中的工作(或喚醒工作線程),並立即從事件處理程序返回。當計算完成並且結果準備就緒後,PostMessage返回結果讓JavaScript線程喚醒(再次作爲事件處理程序)並執行DOM操作。請注意,當前PostMessage必須在主線程上調用,因此工作線程必須使用CallOnMainThread來喚醒主事件處理程序線程,以便它可以執行PostMessage。

是不是繼續傳遞風格的樂趣?

+0

此問題的任何更新? – 2015-01-12 03:57:55

0
  1. 可以使用文件輸入元素和JavaScript將文件上傳到HTML文件系統,然後可以通過JavaScript和NaCl操作文件。 nacl_io庫實現標準posix方法,如fread,所以一旦你保存了你的文件,它非常簡單。有關JS,請參見here(不要被棄用消息推遲,它在Chrome中實現)和here

  2. 由於@Bennet Yee提到,NaCl模塊不能修改頁面,而是將消息傳遞迴瀏覽器窗口,由JavaScript處理。聽起來像你可能想要傳回一些JSON數據。 Google郵件系統上的文檔請參見here

相關問題