2

我是Native Client的新手;也是插件/擴展的新手。這讓我感到插件/擴展是在某些方面比NaCl的「更好」:Google Chrome Native Client與插件或擴展相比

  1. 可以編譯插件/擴展程序的任何地方/無論如何,產生一個普通的舊DLL或一個.so; NaCL只需要通過NaCl工具鏈進行二元生產。

  2. 插件/擴展程序可跨瀏覽器移植(例如,它應該運行在FIrefox以及更多以及Chrome中)。這是因爲插件/擴展堅持在Netscape 3

推出了事實上的標準。如果這一切屬實,那麼是什麼的NaCl在插件/擴展的優勢是什麼?

+0

提示:Windows不是唯一的操作系統;) – 2012-03-15 07:39:37

回答

7

總之:安全。 NPAPI插件是不可用的。它們是本機代碼,運行在流程外並在瀏覽器的沙箱外運行,這意味着它們可以在您的機器上執行任何操作。

另一方面,NaCl在Chrome的沙盒中運行,並且只能訪問一組定義良好的API。聰明的編譯技巧確保代碼不會觸發(有意或無意)惡意執行不可信方法。

http://www.chromium.org/nativeclient/getting-started/getting-started-background-and-basics是一個很好的資源概述的差異。我建議至少瀏覽一下,以便了解NaCl正在努力實現的目標。

+0

感謝您的好回答,Mike。 – 2012-03-15 09:37:18

+0

不過,我不明白。畢竟,這是我的代碼正在運行,所以沒有安全風險。此外,NaCl作爲插件運行。所以,正如我所說,我不明白。 – 2012-03-23 14:23:40

+0

@PeteWilson:安全風險是A)你的代碼有一個錯誤,B)你的代碼是惡意的(如果你打算讓其他人使用你的擴展)。另外,在Metro模式下運行Chrome時,NPAPI不​​起作用。 – Brian 2012-08-09 18:27:15

7

首先,你一直在說「插件/擴展」,但擴展和NPAPI插件是完全不同的。 NPAPI插件是二進制的,並且(如你所說)是跨瀏覽器的。擴展程序是按瀏覽器的;每個瀏覽器都有自己的一套擴展API和功能,但通常用HTML/CSS/JS編寫。

至於你的問題:除了在另一個答案中提到的非常重要的安全方面:平臺可移植性。如果您想在NPAPI中進行繪圖,事件處理,播放聲音等,您需要編寫三個完全不同的實現 - Windows,Mac和Linux - 並且您需要提供三個不同的插件副本。 NaCl/Pepper對任何事物都有平臺中立的抽象。

+0

我明白了,謝謝。我沒有看到文檔中關於平臺無關抽象的部分。非常重要,當然。 – 2012-03-15 09:34:58