前言
在Firefox下可用的npapi插件,在chrome下調用時遇到問題,於是嘗試研究chrome下的ppapi插件,一路上真是磕磕碰碰,波折不斷啊。
階段一、復用npapi
嘗試將npapi直接用在chrome中,結果在chrome://plugins頁下能看到npapi的插件,調試時看到插件對象被創建了,但是無法調用插件對象的函數。
之后各種嘗試未果,網上一搜貌似2013年的時候chrome就開始逐漸不支持npapi了,於是只有嘗試ppapi。。。
階段二、創建ppapi
建簡單的ppapi dll項目,運行命令chrome --register-pepper-plugins="G:\\example.dll#ppexample##1.0.0;a
pplication/x-ppapi-example" file:///G:/web/index.html打開chrome,插件可用,可惜直接打開chrome,插件不可用,且在chrome://plugins頁下找不到插件。
雖然在官方說明中看到了這個命令行是調試用的,但是找了一圈也沒找到發布的命令,郁悶壞了。。。
然后各種嘗試,在chrome://plugins頁下找已存在的PPAPI插件,然后在注冊表中找可能注冊的位置,結果搜索一圈都沒找到!!!
最后看到在網上看到有老外說發布不能直接發布ppapi,要發布成NaCl!不知道為啥還能在chrome://plugins頁下找已存在的PPAPI插件呢?
階段三、NaCl環境搭建
1.越獄
不越獄你休想訪問google的資源,這點真讓人郁悶:(
2.下載
在https://developer.chrome.com/native-client上下載sdk並解壓。
3.更新
cmd中進入sdk目錄下,輸入naclsdk list執行完后再輸入naclsdk update,偶這個版本都到pepper37了。
4.下載並安裝python
注意下載python2.7,而不要下載3.*
5.配置參數
進入系統環境變量
Path中加入python安裝目錄如"C:\Python27;"
新建變量NACL_SDK_ROOT,值為nacl_sdk的pepper路徑如"C:\nacl_sdk\pepper_37\"
6.編譯項目
cmd下進入C:\nacl_sdk\pepper_37\getting_started下,輸入make可進行編譯,輸入make serve可編譯並啟動python服務器,
7.配置chrome
進入chrome的chrome://flags/下啟用Native Client。
進入開發者工具下面點擊右邊的設置按鈕,在General Tab下選擇Disable cache。
8.查看效果
需要注意的是nacl只能在服務器環境下查看效果,也就是說你沒法像別的瀏覽器一樣,直接輸入,file:\\\c:\index.html打開頁面就能看到效果,而必須在服務器環境下查看效果。
按nacl sdk的設定,直接用命令make serve就能啟動服務器,然后輸入http://localhost:5103查看效果
我的機子環境比較郁悶,每次cmd都顯示成功啟動了服務器,但是只要輸入http://localhost:5103,都提示httpd.py一堆錯誤,估計是我的python版本和httpd.py不兼容吧,因為我對python不大熟悉,我也懶得折騰這個問題了,直接把build好的東西放到一個服務器下,就能看效果了。
走的這一步就算是nacl新手上路了,但是這個還沒完,更郁悶的是下一階段
階段四、嘗試用windows函數
因為我想要做的應用,是想能夠訪問windows系統下的盤符的,在npapi中,我調用了FindFirstVolume等windows函數。郁悶的是將這函數轉移到nacl中又是遇到重重問題:
1.先是make的時候提示沒有找到定義,這個好辦,在makefile中用-I將vs的頭文件路徑都給加上
2.接着再make,各種錯誤一大堆,無法識別的int64__等等類型、Only Win32 targets supported!等,找了一圈也沒找到解決的辦法。可能可以通過-target和-arch參數的配置來解決,但是沒找到正確的配置方法
3.接着只有嘗試找nacl_sdk自帶的一些函數庫,找了一圈,倒是找到獲取文件夾下文件的函數了,就是沒找到獲取盤符內容的函數。。。
4.想找不用windows函數的替代函數,可惜沒找到:(
5.爬上博客園來發個帖子,看有沒有人有辦法!!!