Native.js技術簡介+總結收集(個人觀點)
Native.js技術,簡稱NJS,是一種將手機作業系統的原生物件轉義,對映為JS物件,在JS裡編寫原生程式碼的技術。
如果說Node.js把js擴充套件到伺服器世界,那麼Native.js則把js擴充套件到手機App的原生世界。
HTML/JS/Css全部語法只有7萬多,而原生語法有幾十萬,Native.js大幅提升了HTML5的能力。
NJS突破了瀏覽器的功能限制,也不再需要像Hybrid那樣由原生語言開發外掛才能補足瀏覽器欠缺的功能。
NJS編寫的程式碼,最終需要在HBuilder裡打包發行為App安裝包,或者在支援Native.js技術的瀏覽器裡執行
再次強調,Native.js不是一個js庫,不需要下載引入到頁面的script中,也不像nodejs那樣有單獨的執行環境,Native.js的執行環境是整合在5+runtime裡的,使用HBuilder打包的app或流應用都可以直接使用Native.js。
技術要求
由於NJS是直接呼叫Native API,需要對Native API有一定了解,知道所需要的功能呼叫了哪些原生API,能看懂原生程式碼並參考原生程式碼修改為JS程式碼。 否則只能直接copy別人寫好的NJS程式碼。
判斷平臺
Native API具有平臺依賴性,所以需要通過以下方式判斷當前的執行平臺:
function judgePlatform(){ switch ( plus.os.name ) { case "Android": // Android平臺: plus.android.* break; case "iOS": // iOS平臺: plus.ios.* break; default: // 其它平臺 break; } }
其他轉換
Android原生應用的主Activity物件 轉為plus.android.runtimeMainActivity()
Android的主Activity物件是啟動應用時自動建立的,不是程式碼建立,此時通過plus.android.runtimeMainActivity()方法獲取該Activity物件
Objective-C方法冒號剔除
[pos setPositionX:(int)x Y:(int)y;] 轉為 pos.setPositionXY(x,y);
OC語法中方法的定義格式為:
“(返回值型別) 函式名: (引數1型別) 形參1 引數2名稱: (引數2型別) 形參2”
方法的完整名稱為: “函式名:引數2名稱:”。
如:“(void)setPositionX:(int)x Y:(int)y;”,方法的完整名稱****為“setPositionX:Y:”,呼叫時語法為:“[pos setPositionX:x Y:y];”。 在JS語法中函式名稱不能包含“:”字元,所以OC物件的方法名對映成NJS物件方法名時將其中的“:”字元自動刪除,上面方法名對映為“setPositionXY”,在NJS呼叫的語法為:“pos.setPositionXY(x,y);”。
檔案路徑轉換
Web開發裡使用的image/1.png是該web工程的相對路徑,而原生API中經常需要使用絕對路徑,比如/sdcard/apptest/image/1.png,此時使用這個擴充套件方法來完成轉換:plus.io.convertLocalFileSystemURL(“image/1.png”)