Adobe Flash Player PPAPI,Adobe Flash Player NPAPI,Adobe Flash Player ActiveX三者有什麼區別?咱們在打開網頁視頻時有時會彈出沒有安裝Flash插件的提示,此時就沒法觀看視頻,想必不少小夥伴都遇到過這種狀況。Adobe Flash Player是瀏覽器顯示Flash動畫必裝的控件程序,它能夠跨屏幕和瀏覽器原汁原味地查看具備表現力的應用程序、內容和視頻。那麼,電腦裏有三個adobe flash軟件,留哪一個?Adobe Flash Player ActiveX與PPAPI與NPAPI有什麼區別呢?咱們一塊兒去了解一下!
- 軟件名稱:
- flashIE控件 Adobe Flash Player ActiveX for IE v11.5.502.131Final官方版(64bit)
- 軟件大小:
- 8MB
- 更新時間:
- 2012-11-28
- 軟件名稱:
- Adobe Flash ppapi插件(chrome內核插件) V27.0.0.159 官方最新版
- 軟件大小:
- 19.3MB
- 更新時間:
- 2017-10-19
Adobe Flash Player ActiveX與PPAPI與NPAPI的區別:
Adobe Flash Player PPAPI是Adobe Flash Player專爲chrome內核而開發的,可以在各類瀏覽器、操做系統和移動設備上使用,軟件短小精悍,功能強大,兼容性高。它使公司和我的可以構建並帶給最終用戶美妙的數字體驗,使您可以在將交互式、豐富內容與視頻、圖形和動畫組合到一塊兒的Web上享受最富表現力的、引人入勝的體驗。
NPAPI是當今最流行的插件架構,由網景開發後Mozilla維護,幾乎支持全部的瀏覽器,不過它存在很大的安全隱患,插件能夠竊取系統底層權限,發起惡意攻擊。
2010年,Google在原有網景NPAPI(Netscape Plugin API)基礎上開發了新的PPAPI(Pepper Plugin API),將外掛插件所有放到沙盒裏運行,2012年Windows、Mac版本的Chrome瀏覽器前後升級了PPAPI Flash Player,並但願今年末值錢完全淘汰NPAPI。
PPAPI的flash相較於NPAPI來說,內存佔用更大,由於全在沙盒裏面運行,並且flash每次更新基本上都是修補安全漏洞。
下面小編主要給你們講一下,三種flash分別針對哪一種市面上經常使用的瀏覽器
PPAPI:供Opera (15以上)、Chromium(開源谷歌)瀏覽器使用
NPAPI:適用於FireFox(火狐)、Safari(蘋果)、Opera (歐朋,12.17版如下)
關於NPAPI和PPAPI:你用360瀏覽器,NPAPI和PPAPI也並不是毫無用處,不能說絕對不用安裝。好比,儘管360瀏覽器自帶flash player,可是想要更新這個集成的flash player一般是要升級瀏覽器的,可是假如你不想升級瀏覽器版本,卻又要更新它集成的flash player以免過時,那怎麼辦呢,這時你能夠藉助於系統中安裝的NPAPI和PPAPI來實現,具體你在360瀏覽器地址欄輸入chrome://plugins回車,點右上方+詳細信息,找到Adobe flash player,研究一下類型和版本,停用哪一個啓用哪一個,人爲設置一下便可。
ActiveX:適用於Windows 七、Vista、XP系統IE內核瀏覽器、本地視頻、遊戲客戶端
關於ActiveX:360安全瀏覽器是雙核,含有IE,在兼容模式下有時須要ActiveX;另外,本地安裝的遊戲、視頻客戶端,也須要使用ActiveX,總之Windows 七、Vista、XP系統,即便不用IE瀏覽器,ActiveX也是有必要安裝的。
通常而言,對於雙核瀏覽器,好比360、QQ、UC瀏覽器等等,NPAPI 和 PPAPI 均可以使用。
哪一個好,裝哪一個,取決於你用哪些瀏覽器
只有正確的安裝flash才能更好的體驗使用它哦。好了,以上就是關於Adobe Flash Player ActiveX與PPAPI與NPAPI有什麼區別?用哪一個好的所有內容,這三種flash你瞭解了嗎?更多精彩內容,請繼續關注腳本之家網站!
ActiveX:適用於Windows 七、Vista、XP系統IE內核瀏覽器、本地視頻、遊戲客戶端
NPAPI:適用於FireFox(火狐)、Safari(蘋果)、Opera (歐朋,12.17版如下)
PPAPI:適用於Chromium瀏覽器、Opera (歐朋,15.00版以上)
-
關於ActiveX:
-
360安全瀏覽器是雙核,含有IE,在兼容模式下有時須要ActiveX;另外,本地安裝的遊戲、視頻客戶端,也須要使用ActiveX,總之Windows 七、Vista、XP系統,即便不用IE瀏覽器,ActiveX也是有必要安裝的。
-
關於NPAPI和PPAPI:
你用360瀏覽器,NPAPI和PPAPI也並不是毫無用處,不能說絕對不用安裝。好比,儘管360瀏覽器自帶flash player,可是想要更新這個集成的flash player一般是要升級瀏覽器的,可是假如你不想升級瀏覽器版本,卻又要更新它集成的flash player以免過時,那怎麼辦呢,這時你能夠藉助於系統中安裝的NPAPI和PPAPI來實現,具體你在360瀏覽器地址欄輸入chrome://plugins回車,點右上方+詳細信息,找到Adobe flash player,研究一下類型和版本,停用哪一個啓用哪一個,人爲設置一下便可。
flash player PPAPI 它的CPU和內存佔用率會比較高,主要是由於緩存大多放在內存裏而不是硬盤上。若是內存不夠用就用flash player NPAPI版的會比較好。
NPAPI是當今最流行的插件架構,由網景開發,後Mozilla維護,幾乎全部瀏覽器都支持,不過存在很大的安全隱患,插件能夠竊取系統底層權限,發起惡意攻擊。
2010年,Google在原有網景NPAPI(Netscape Plugin API)基礎上開發了新的PPAPI(Pepper Plugin API),將外掛插件所有放到沙盒裏運行,2012年Windows、Mac版本的Chrome瀏覽器前後升級了PPAPI Flash Player,並但願今年末值錢完全淘汰NPAPI。
按照個人理解(有誤請不吝指出),NPAPI是用native code寫browser的plugin,和ActiveX相似,而和用javascript/css寫的plugin相對。網銀什麼的通常用這個配合本身的本地操做系統驅動來實現安全密碼輸入(防key logger)之類的事情。
所以不是很明白提問中所說的「瀏覽器與'插件'間的數據通訊」具體所指爲什麼。猜想一下,莫非原意是問「瀏覽器和本地應用/驅動間的數據通訊」?
若是隻是爲了性能或者重用舊代碼之類的緣由必須使用native code寫plugin(遊戲什麼的),Chrome的解決方案是Portable Native Client(故意縮寫爲NaCl,食鹽): Technical Overview。PNaCl運行通過校驗的native code,所以能夠作到兼顧安全性和性能。PNaCl提供一套受限制的API(例如OpenGL ES之類),不提供TCP/UDP,要通訊也要使用websocket之類的機制NPAPI 是瀏覽器的應用編程接口,它提供了一組 API 供瀏覽器調用其具體實現代碼。
其生命週期看可能與整個瀏覽器生命週期相同(這要看具體plugin實現了)。
NPAPI 能夠與本地系統用戶權限一致的權利調用任何系統資源。這就打穿了瀏覽器沙箱環境。所以身存在着必定的安全隱患。
如,NPAPI 的插件代碼肆意調用系統資源致使死機、代碼存在漏洞被系統內其餘惡意程序利用等。
網銀之類的 NPAPI(若是真的有不少的話 = =|||) 同理也是使用此類技術,在用戶本地使用本地應用(dll 或其餘編譯好的程序)計算、加密、經過安全(網絡)獲取用戶所需證書、密碼等關鍵信息。一旦存在漏洞,也很容易被本地的第三方應用程序利用。
Chrome 的 NACL 與之相似,可是將安全性加高。 NACL 根據 Technical Overview 描述,是運行在獨立沙箱內,並限制:
- no support for hardware exceptions
- no support for process creation / subprocesses
- no support for raw TCP/UDP sockets (analogous versions—websockets for TCP and peer connect for UDP—are in the works and will be available soon)
- no support for query to available memory
至於 websocket …… 偶真不知道跟 NPAPI 的替代有啥關係,要有關係也是包含關係吧。如: NPAPI 的替代技術實現裏不限制在沙箱環境內使用 websocket 技術訪問網絡資源啥的。
Mozilla 扔掉Pepper的緣由看起來也很簡單:它更但願HTML5標準化來解決一切。好比用WebGL來取代Pepper的OpenGL/ES封裝。PPAPI做爲本地API的封裝(而不是NPAPI同樣僅僅提供接口),自己就須要一個「到底要封裝什麼」的規範,而這個規範的造成過程跟HTML5的標準化在某種意義上差很少是重合的。做爲但願HTML5儘快、盡全面覆蓋的Mozilla(他們甚至爲了阻擊NaCl製造了asm.js)選擇全力支持HTML5是很天然的事情。
至於前幾個答案屢次提到的NaCl/PNaCl(區別是前者的可執行部分就是本地CPU代碼,然後者的可執行部分是LLVM IR),它跟PPAPI不能分開去看,這二者目前是一而二二而一的關係,都是Google獨佔。至於爲啥Google做爲HTML5領軍廠商卻分神去作這個東東,我想應該是被前景誘惑了吧。LLVM IR是能夠經過JIT在運行時轉本地代碼執行的,結合PPAPI做爲封裝過的本地API,假設一切都能解決,那麼將既能作到「一次編譯,處處運行」,又能夠在全部平臺上都達到本地開發的性能,簡直就是Silver Bullet同樣的存在……不過實際上達到這個效果要求LLVM JIT效率進一步真正提升到本地代碼的速度(09年看評測不少特定測試在性能上已經能夠達到甚至超過本地代碼,但也有很多更慢的),也要求對全部平臺都封裝好須要的各類API,須要的開發力量至關龐大。這些年Google縱橫捭闔,藉着準備HTML5標準化的名義裏在各平臺的Chrome瀏覽器裏大肆封裝各類看起來用得上用不上的API(畢竟Pepper封裝後提供一個js接口是再簡單不過的了)我以爲從這個角度看上去就很容易理解了。
總結:HTML5+asm.js和Pepper+PNaCl,這就是該新聞中傳出要拋棄NPAPI的兩大巨頭各自給出的選擇。前者暫時擁有時間,後者也許擁有將來。至於哪一個最終會勝出,仍是讓歷史來講話吧。
來自chromium項目的PPAPI致力於解決這些問題,並且還提供了更加豐富的接口,如近似於OpenGL的3D接口,使大型網頁遊戲這種應用也能經過插件的方式得到很好的效能。另外Mozilla的Gecho也已經支持PPAPI,天下大同指日可待。
有人提到NaCL,實際上也只是一個使用PPAPI接口的超級插件,手機輸入太費事,就不展開說了。另外websocket與這些接口並沒有直接聯繫。
轉載自:http://blog.csdn.net/lee353086/article/details/49302917
NPAPI和PPAPI開發
Author: kagula
Revison: 1Last modify date:2015-10-20
環境:
[1]Visual Studio 2010 SP1Visaul Stuio 2013 Update4
[2]Python2.7
[3]Firefox 41.0.1
[4]IE 11
[5]Google chrome 45.0.2454.101
[6]Opera 32.0
[7]360瀏覽器 7.1.1.808
[8]nacl sdk pepper39
[9]windows7 SP1 64bits
關鍵詞
Firebreath, NPAPI, PPAPI, Web worker, Messaging System, Native Client Module, Application StructureChrome Web Store, portable executable file, architecture-specific executable file
前言
若是要實現Windows平臺,跨不一樣瀏覽器插件,就須要分別實現ActiveX 適用瀏覽器IE11,由於IE11對FireBreath兼容性不是很好。
FreBreath(NPAPI) 適用瀏覽器,360瀏覽器,Chrome 42版本如下,Opera、Firefox。
NaCl(可分爲PPAPI、NaCl、PNaCl三個等級) 適用瀏覽器Chrome 42版本或以上。
ActiveX的baidu上不少,可是NPAPI和PPAPI的很不完善,因此這裏僅僅介紹NPAPI和PPAPI的開發。
![](http://static.javashuo.com/static/loading.gif)
第一部份:NPAPI
第一個插件(NPAPI):
firebreath是個跨瀏覽器插件開發工具,因此先嚐試FireBreath。
Step1:
參考資料[3]下載firebreath最新穩定版本,並解壓到「D:\SDK\firebreath-FireBreath-105dcc6\」目錄下
從官網上下載firebreath-boost-1.50.0.zip
位置參考下面擺放:
<FB_ROOT>/src/3rdParty/boost/boost/
<FB_ROOT>/src/3rdParty/boost/libs/
Step2:先建一個Hello工程。
打開控制檯,切換到「D:\SDK\firebreath-FireBreath-105dcc6」文件夾,
輸入命令「python fbgen.py」根據提示輸入你第一個工程plugin name,plugin description,company name等信息。
命令執行完畢後,再調用「prep2010.cmd」命令。
python就在當前build子目錄下建好了VS2010 solution,FireBreath.sln文件。
打開sln後應該就能正確編譯。若是有問題參考資料[1]。
Step3:測試插件是否正確加載。
[S3-1]IE下運行插件。
命令行方式轉到「D:\SDK\firebreath-FireBreath-105dcc6\build\bin\hello\Debug」路徑下,使用「regsvr32 nphello.dll」註冊控件。
"D:\SDK\firebreath-FireBreath-105dcc6\build\projects\hello\gen"路徑下打開「FBControl.htm」文件,就能夠在IE中正常運行hello控件。
若是有問題,參考資料[2]。
[S3-2]Firefox下運行插件
我是把dll複製到「C:\Users\kagula\AppData\Roaming\Mozilla\Firefox\Profiles\ie1ypj6h.default\plugins」路徑就Ok了,若是沒有「plugins」目錄就新建一個。
不一樣的計算機Win7下,參考下面的格式就Ok了。
「C:\Users\XXX\AppData\Roaming\Mozilla\Firefox\Profiles\XXX.default\plugins」
[S3-3]Chrome下運行
Chrome 45 不支持NPAPI。
[S3-4]Opera下運行
使用「regsvr32 nphello.dll」註冊控件後,能夠直接使用,
可是會提示「此網站使用的插件很快將不被支持」
[S3-5]360瀏覽器下運行
使用「regsvr32 nphello.dll」註冊控件後,能夠直接使用,
Step4:測試插件功能是否正常
[1]hello.cpp的FB::JSAPIPtr hello::createJSAPI()函數,建立了helloAPI實例返回。
查看helloAPI實現,
echo方法用來示例參數傳遞,testEvent方法示例事件回調,testString和version示例如何存取對象的屬性。
[2]FBControl.htm文件,點擊「Fire a test event」會間接調用helloAPI實例的testEvent方法,這個方法又會激活JS的test事件。
在IE中沒有反應,可是在Opera和360瀏覽器中測試正常。
[3]FBControl.htm文件,點擊「Activate click counter」,就多一次對插件echo事件的綁定。
而後,再點擊「Click me!」,JS會調用插件的echo方法,而插件的echo方法會調用js對echo事件的綁定function。
在IE中依舊沒有反應。
[4]測試插件屬性的存取,
[S4-1]爲FBControl.htm文件,添加一個js函數。
function testPluginPropertyAccess()
{
alert(plugin().testString);
plugin().testString = "插件屬性的默認值已經被JS修改";
alert(plugin().testString);
}
爲FBControl.htm文件,添加一個連接,可讓用戶點擊。
<a href="#" onclick="javascript:testPluginPropertyAccess()">測試對屬性值的修改</a> <br />
[S4-2]修改helloAPI.h文件,在helloAPI的構造函數中添加下面的代碼。
m_testString = "Default value in c++";
這樣咱們才能知道這個屬性的值是來自C++代碼的。
[S4-3]而後再參考上文,測試便可。
[Step5]驗證是否能自繪區域
一開始在"hello"項目上onWindowAttached死活不會來,後來又重建了一個firegbreath項目就行了。
猜想是用fbgen.py新建項目時,輸入的參數不對。
下面是個人測試函數,我往plugin api裏註冊了「draw」函數,用來測試可否繪製html表面。
void helloAPI::draw()
{
if (_wnd) {
HDC hDC = GetDC(_wnd->getHWND());
RECT rect;
rect.left=0,rect.top=0,rect.right=256,rect.bottom=256;
HBRUSH hbr;
hbr = CreateSolidBrush(RGB(255,0,0));
FillRect(hDC,&rect,hbr);
ReleaseDC(_wnd->getHWND(),hDC);
}
}
具體參考「...\firebreath-FireBreath-105dcc6\examples\BasicMediaPlayer」目錄下的源代碼。
備註
[1]Firebreath缺省沒有鏈接下面兩個事件:
EVENTTYPE_CASE(FB::RefreshEvent, draw, FB::PluginWindow);
EVENTTYPE_CASE(FB::WindowsEvent, onWindowEvent, FB::PluginWindow)
第二部份:PPAPI
Chrome插件只能使用PPAPI接口的Native Client(NaCl)方式編寫,Native Client分別有三種embed類型
「application/x-ppapi」,平臺相關,惟一能直接使用win32 api的platfrom(有功能上的限制)。 dll格式,
不容許經過Chrome web store分發。聽說Flash就是採用第一種類型開發的。
「application/x-nacl」, 只能經過PPAPI,平臺無關,cpu相關。nexe格式,只能經過Chrome web store分發。
「application/x-pnacl」,只能經過PPAPI,平臺無關,cpu無關。pexe格式,能夠不經過Chrome web store分發。
爲了減小麻煩,建議系統只安裝Visual Studo 2010版。
跟着官網先學習第一個PPAPI插件(Native Client)的開發流程
首先參考
《C++ Tutorial: Getting Started 》
https://developer.chrome.com/native-client/devguide/tutorial/tutorial-part1
創建,運行,修改本身的第一個portable native client程序,這樣就先有了個概念。
按照tutorial一步步走是沒有問題了,可是
如何在VS中開發、調試native client程序?
你須要爲nacl sdk安裝vs_addin。
官網文檔上說vs_addin只支持vs2010sp1和vs2012,可是通過修改能支持vs2013,可是不建議折騰。
[Step1]設置當前計算機用戶變量
NACL_SDK_ROOT環境變量爲「E:\SDK\nacl_sdk\pepper_39」。
CHROME_PATH環境變量爲「C:\Program Files (x86)\Google\Chrome\Application\chrome.exe」。
[Step2]管理員權限啓動控制檯轉到「E:\SDK\nacl_sdk\vs_addin」路徑下,輸入「Install」命令安裝「vs_addin」。
之後你還能夠經過輸入「Install --uninstall」命令來反安裝。
[FinalStep-PPAPI]如今能夠轉到「E:\SDK\nacl_sdk\vs_addin\examples\hello_world_gles」目錄,使用VS2010打開hello_world_gles solution。
platform從默認「NaCI32」改成「PPAPI」便可編譯經過,會在當前project路徑下產生win目錄,win目錄下會生成hello_world_gles.dll文件。
直接按[F5]就能夠Debug這個dll,在VisualStudio中進入斷點。
[FinalStep-NaCl64]platform從默認「NaCI32」改成「NaCI64」,
project property page should be
[General]->[Native Client]->[IndexPage of NaCl Application]->[index_newlib.html]
[General]->[Native Client]->[Toolchain]->[newlib]
在當前項目NaCl64\newlib\Debug路徑下只生成一個hello_world_gles_64.nexe文件,因此調試針對的是這個文件。
因爲這個文件是虛擬代碼(聽說運行前會轉成機器碼)因此只能用nacl sdk帶的gdb來調試。
[F5]啓動Debug,默認打開index_newlib.html頁面,啓動gdb控制檯後就能夠命令行方式調試了。
你可能須要設置chrome啓用NaCl,受權Chrome可以使用未經Chrome Web Store發佈的nexe文件。
[FinalStep-PNaCl]platform從默認「NaCI32」改成「PNaCl」,會在當前項目下編譯輸出一個pexe文件和三個針對不一樣cpu的nexe文件,VS中[F5]不會進入Debug、break模式。
備註:
[1]具體參考官方vs-addin文檔。 https://developers.google.com/native-client/dev/devguide/devcycle/vs-addin
[2]在啟動chrome調試前,勾選F12->Settins->General->Disable cache(while DevTools is open)防止html緩存。
如何部署pexe格式控件到chrome上?
[Step1]先檢查PNaCI是否在chrome中啓用(默認已經安裝)
在chrome中addressbar中使用「chrome://nacl/」查看是否容許PNaCI插件。若是沒有安裝相應component,能夠輸入「chrome://components」在compoennts頁面中安裝或更新。
[Step2]假設"E:\nginx-1.8.0\html"是你Web服務器的webroot路徑,把「E:\SDK\nacl_sdk\pepper_39\getting_started\part1」目錄下的
hello_tutorial.nmf和hello_tutorial.pexe兩個文件複製到"E:\nginx-1.8.0\html"。把「index.html」重命名爲「hello_tutorial.html」並複製到webroot路徑中。
如今你的webroot路徑中已經有了「hello_tutorial.nmf」、「hello_tutorial.pexe」和「hello_tutorial.html」三個文件。
[FinalStep]在chorme中輸入「http://localhost:8080/hello_tutorial.html」打開pexe測試頁面,測試成功。
如何運行vs_addin自帶的hello_nacl_cpp項目?
[Step1]用vs2010打開hello_nacl_cpp項目後,修改好代碼後,選擇PNaCl平臺編譯出pexe和nexe文件。
[Step2]在「E:\SDK\nacl_sdk\pepper_39\examples」路徑下新建「hello_nacl_cpp」目錄。
[Step3]複製「E:\SDK\nacl_sdk\vs_addin\examples\hello_nacl_cpp\hello_nacl_cpp\PNaCl\newlib\Debug」路徑下的pexe、nexe擴展名的四個文件
到新建的「E:\SDK\nacl_sdk\pepper_39\examples\hello_nacl_cpp」路徑下面。
複製「E:\SDK\nacl_sdk\vs_addin\examples\hello_nacl_cpp\hello_nacl_cpp\index.html」文件到新的路徑下。
複製「E:\SDK\nacl_sdk\vs_addin\examples\hello_nacl_cpp\hello_nacl_cpp\PNaCl\hello_nacl_cpp.nmf」文件到新的路徑下。
[Step4]修改新路徑下的index.html,把embed元素中的type屬性從「application/x-nacl」改成「application/x-pnacl」。
由於PNaCl插件mime type只能爲「application/x-pnacl」。
修改新路徑下的hello_nacl_cpp.nmf文件,使之支持pexe,並能從當前目錄讀取pexe文件,修改後的內容以下:
{
"files": {},
"program": {
"portable": {
"pnacl-translate": {
"url": "hello_nacl_cpp.pexe"
}
},
"x86-64": {
"url": "hello_nacl_cpp_64.nexe"
},
"arm": {
"url": "hello_nacl_cpp_arm.nexe"
},
"x86-32": {
"url": "hello_nacl_cpp_32.nexe"
}
}
}
[FinalStep-PNaCl方式]
在控制檯下啓動「E:\SDK\nacl_sdk\pepper_39\examples\httpd.cmd」程序。
在chrome中輸入「http://localhost:5103/hello_nacl_cpp/」成功打開測試頁面。
如何新建NaCl項目
在visual studio中新建C++ Empty Project
設置項目屬性為[General]->[Project Defaults]->[Configuration Type]->[Dynamic Library(.dll)]。
新建好項目後,就能夠添加源代碼文件開始編程。
這裏沒有重新的C++ Dll Empty Project開始,是由於這個wizard會引入不少win32定義致使NaCl64平臺編譯失敗,修改起來太麻煩。
示例代碼有兩種風格,第一種參考「vs_addin\examples」下的hello_nacl_cpp項目,第二種參考「hello_world_gles」項目,
開發包自帶的例子基本上都屬於這種風格。
典型的代碼以下:
- #include "ppapi/cpp/instance.h"
- #include "ppapi/cpp/module.h"
- #include "ppapi/cpp/var.h"
- class MyInstance : public pp::Instance {
- public:
- explicit MyInstance(PP_Instance instance) : pp::Instance(instance)
- {}
- virtual ~MyInstance() {}
- virtual void HandleMessage(const pp::Var& var_message) {
- if (var_message.is_string())
- {
- std::string message = var_message.AsString();
- pp::Var var_reply;
- std::string reply = "echo [";
- reply.append(message);
- reply.append(" from my NaCi module");
- var_reply = pp::Var(reply);
- PostMessage(var_reply);
- }
- }
- };
- class MyModule : public pp::Module {
- public:
- MyModule() : pp::Module() {}
- virtual ~MyModule() {}
- virtual pp::Instance* CreateInstance(PP_Instance instance) {
- return new MyInstance(instance);
- }
- };
- namespace pp {
- Module* CreateModule() {
- return new MyModule();
- }
- }
測試dll、pexe格式的控件用的html和js能夠從「hello_world_gles」例子的基礎上只要作很小的修改就能測試插件有沒有裝載成功。
「PPAPI」平臺下編譯不會fire load事件在html中,致使不會提示成功裝載插件的提示,可是實際上「hello_world_gles」插件已經正常運行。
你可能須要修改當前工程的[Configuration Properties]->[General]->[Native Client]->[Index Page of NaCl Application]屬性指定html文件名
VS啓動Debug的時候會以命令行方式傳遞給chrome的flags設置。
因此在VS外你要使用nexe文件,須要在Chrome瀏覽器中輸入「chrome://flags/」啓用「Native Client」,受權chrome可使用未經chrome web store發佈的native client程序。
備註:
[1]NaCl64啓動調試後,在Chrome46中裝載控件會失敗,致使gdb不能單步跟蹤,可是Chrome43沒有這個問題。
[參考資料]
https://developer.chrome.com/native-client/devguide/devcycle/debugging
https://developer.chrome.com/native-client/devguide/devcycle/building
如何在vs2013中使用vs2013的native client插件
[Step1] 複製 %user%\Documents\Visual Studio 2012\Addins\ 到 %user%\Documents\Visual Studio 2013\Addins
[Step2] 複製 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\NaCl\ 到 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\NaCl\
[FinalStep] 複製 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Platforms\ 下的如下文件夾
ARM NaCl32 NaCl64 NaClARM PNaCl PPAPI
到 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\
C:\Users\kagula\AppData\Local\Google\Chrome\User Data
C:\Program Files (x86)\Google\Chrome\Application
如何從新編譯NaCi的ppapi_cpp?
打開Visual Studio Command Prompt而後使用下面的命令:
$ cd $NACL_SDK_ROOT\src\ppapi_cpp
$ make TOOLCHAIN=win CONFIG=Debug
$ make TOOLCHAIN=win CONFIG=Release
NaCl Module如何調用Win32 API?
項目只有在「PPAPI」platform下才能直接調用win32 api,雖然能自由調用win32api,
可是調用win32 api建立新的進程,或調用C++ std對本地磁盤進行操做都會失敗!
想要自由的使用win32 api只能參考下面的文檔來實現,聽說是惟一的解決辦法。
《Native Messaging》
https://developer.chrome.com/extensions/nativeMessaging
下面解釋了「PPAPI」platform的限制。
http://stackoverflow.com/questions/23472077/purpose-of-ppapi-toolchain-and-how-to-use-it?rq=1
JS如何接收來自Native Client的消息
最簡單的例子是..\nacl_sdk\vs_addin\examples\hello_nacl\hello_nacl下的index.html源文件。
常見問題
Q 編譯項目提示。
Error 1 error MSB6006: "C:\sdk\nacl_sdk\pepper_39\toolchain\win_x86_newlib\bin\x86_64-nacl-g++.exe" exited with code 1.
那是少了依賴庫引發的,好比說,若是你用到gles2,添加「ppapi_gles2」依賴庫後,問題消失。
Q 在「PPAPI」plaform下提示ppapi_cpp.obj找不到。
修改依賴項從「ppapi_cpp;ppapi;」爲「ppapi_cpp.lib;ppapi.lib;」後,從新rebuild便可。
Q 運行「...\nacl_sdk\pepper_39\examples」下的例子,chrome提示「PnaclCoordinator: Compile process could not be created」
Chrome中輸入「chrome://flags/」,中止「Native Client 基於 GDB 的調試 Mac, Windows, Linux, Chrome OS」項便可。
Q遇到sdk下的examples沒法裝載的例子
Chrome中輸入「chrome://components」檢查pnacI是否已經安裝。
總結
相對於NPAPI,PPAPI開發成本高,運行速度慢,所謂sandbox安全性只不過是始皇上繳天下鐵器的強盜邏輯,
惟一的亮點是PPAPI的pexe格式插件能夠一處編譯到處運行。
備註:
[1]在「...\nacl_sdk\pepper_39\examples」路徑下google提供了大量的example用來幫助開發者學習PPAPI。
參考資料[10]也有大量的pexe例子。
參考資料
[1]《跨瀏覽器插件框架FireBreath安裝與使用之一——Windows下的插件》http://blog.csdn.net/ubuntu64fan/article/details/7941167
[2]《Firebreath插件製做》
http://blog.csdn.net/oldmtn/article/details/46362135
[3]FireBreath Home
http://www.firebreath.org/display/documentation/FireBreath+Home
[4]《firebreath 在谷歌和火狐瀏覽器下的調試 以及打包》
http://www.cnblogs.com/drzhong/p/firebreath_dubug.html
[5]《Building a firefox plugin – part one》
http://colonelpanic.net/2009/03/building-a-firefox-plugin-part-one/
[6]《Introduction to Portable Native Client》
https://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client
[7]《Distributing Your Application》
https://developer.chrome.com/native-client/devguide/distributing
[8]《Problems when develop ppapi plugins in NACL.》
https://groups.google.com/forum/embed/#!topic/native-client-discuss/hihnZnB8k0M
[9]《2DPaintingModel》
https://code.google.com/p/ppapi/wiki/2DPaintingModel
[10]《ppapi example》
https://chromium.googlesource.com/chromium/src/ppapi/+/master/examples
樓主如今還研究PPAPI插件開發嗎?
頂一下,還要六個字符
PPAPI開發沒有用,開發出來的DLL文件不能發佈和安裝,只能用於本地調試。
Flash Player的PPAPI版本插件是內置在Chrome一塊兒的,因此能安裝、能使用。
我最近也在研究Chrome插件開發,痛苦中!
能夠參考下這個文檔。具體的編程這塊還在探索中。
這個問題樓主解決了嗎?