javascript 最常應用的場合是 Web 頁面,因此,與WEB開發(fā)相關(guān)的知識,最好要有所了解。
優(yōu)先級高的相關(guān)知識:
1. HTML,這是基本,最好自己能用 記事本 寫一些靜態(tài)的html,來加深印象。
2. DHTML,這是 javascript 編程所要遇到的宿主對象,你要對這個對象進行訪問或控制。(加點說明吧,javascript不單能運行在如IE之類的瀏覽器上,也可以直接在操作系統(tǒng)上運行,還可以在WEB服務器上運行,還可以在。。。,這運行的平臺就是宿主,每個宿主有自己的對象。)
3. CSS,樣式,這也是必須的。
4. 后臺編程語言,特別是一些輸出標簽,這樣,和后臺工程師合作就會順利得多。
5. 美工,這個不是很重要。
6. XML,數(shù)據(jù)庫。這些最好也要有所了解。
7. Flash,了解如何進行通訊就可,不一定用得上。
8. js framwork,網(wǎng)上當前比較流行的javascript框架,如yahoo yui, jquery, prototype。.有很多,大致了解幾種,用時再細學,對于應用來說,有個大概就行了。
9. 調(diào)試開發(fā)工具, 有 eclipse,也有其它專用的,還有 firebug,一個很有名的瀏覽器(Firefox, google chorm)插件,IE下么有個 devlopment tool,嗯,英文不好,拼錯了別怪。
1.按APP的打包與發(fā)布方式來分類,APP分為三類:
需要安裝的APP,Native App、Hybird App、React App都屬于這一類,發(fā)布時需要將App打包成可執(zhí)行程序,然后掛到市場或者網(wǎng)站上,讓用戶下載安裝后才能運行,其功能受限于平臺API與權(quán)限,但也可以通過一些技巧越過平臺API與權(quán)限限制,比如Hook技術(shù)。
不需要安裝的APP,Web App,其實本質(zhì)上就是個網(wǎng)站,只是做成了和手機APP相仿的樣子,發(fā)布方式與網(wǎng)站發(fā)布相同,用戶可以通過瀏覽器或者微信之類的工具去加載這個網(wǎng)站,其功能相對于手機,受限于瀏覽器引擎提供對手機本地服務(文件、相機等等)訪問的JS接口,通常功能非常少,所以限制較大。
需要用戶已經(jīng)安裝某個第三方APP,然后跑在第三方APP上的APP,這類技術(shù)安卓上較多(典型的Python程序可以跑在PythonOnAndroid APP上,或者Ruby解釋器可以跑Ruby程序),而iOS由于有對這類行為做出過明確限制,上架審核規(guī)則里有明確指出,不準APP可以下載源代碼從而擴展功能,所以iOS上過去并不存在這樣的APP。
2.針對需要安裝的APP,APP開發(fā)技術(shù)有如下分類
基于官方推薦與支持的語言與框架開發(fā)的App,安卓目前官方推薦的是Java、Kotlin與C/C++進行開發(fā),iOS目前官方推薦的是Objective-C、Swift與C/C++
基于一些第三方支持的語言和框架開發(fā)的App,這類大多是由一些互聯(lián)網(wǎng)巨頭與開源組織維護的,典型的技術(shù)有:
Qt(知名的跨平臺GUI框架,基于C++,現(xiàn)在隨諾基亞倒臺被Digia收購與商業(yè)化),可以用來開發(fā)安卓和iOS,但問題是我有了Java和OC,為啥還要去用Qt C++,是因為太閑或者覺得BUG不夠多嗎。
Mono,微軟.NET框架的開源山寨版,與.NET兼容程度很高,一般使用C#開發(fā),可以用來開發(fā)安卓和iOS,性能不佳,C#的開發(fā)效率也沒比Java和OC高到哪去,還要面對沒有官方支持的一堆坑,用他得靠信仰
Node.js,可以使用JS開發(fā)然后編譯成Native程序,可以用來開發(fā)安卓和iOS,但和大部分JS的東西一樣,你懂的,JS是一種宗教
Go,Google的高并發(fā)系統(tǒng)級語言,原目標是用來替換C,但似乎并不是很美,新的語法似乎還不如老的C,看個人喜好吧,目前有一些第三方寫的Android框架,iOS不清楚,沒官方支持
Erlang、Ruby、Python,只要能編譯二進制程序的框架理論上都能支持安卓和iOS,當然大多不靠譜,有病的可以試一下。
在 App 混合開發(fā)中,app 層向 js 層提供接口有兩種方式,一種是同步接口,一種一異步接口(不清楚什么是同步的請看這里的討論)。
為了保證 web 流暢,大部分時候,我們應該使用異步接口,但是某些情況下,我們可能更需要同步接口。同步接口的好處在于,首先 js 可以通過返回值得到執(zhí)行結(jié)果;其次,在混合式開發(fā)中,app 層導出的某些 api 按照語義就應該是同步的,否則會很奇怪——一個可能在 for 循環(huán)中使用的,執(zhí)行非常快的接口,比如讀寫某個配置項,設計成異步會很奇怪。
那么如何向 js 層導出同步接口呢?我們知道,在 Android 框架中,通過 WebView.() 這個函數(shù),可以將 java 接口導出到 js 層,并且這樣導出的接口是同步接口。但是在 iOS 的 Cocoa 框架中,想導出同步接口卻不容易,究其原因,是因為 UIWebView 和 WKWebView 沒有 這樣的功能。
同時,Android 這個功能爆出過安全漏洞,那么,我們有沒有別的方式實現(xiàn)同步調(diào)用呢?我們以 iOS UIWebView 為例提供一種實現(xiàn),WKWebView 和 Android 也可以參考。為了找到問題的關(guān)鍵,我們看一下 iOS 中實現(xiàn) js 調(diào)用 app 的通行方法:首先,自定義 UIWebViewDelegate,在函數(shù) :navigationType: 中攔截請求。
- (BOOL) webView:(UIWebView* _Nonnull):(NSURLRequest* _Nonnull)requestnavigationType:()navigationType {if ([request.HTTPMethod compare:@"GET" options:] != NSOrderedSame) {// 不處理非 get 請求return YES;}NSURL* url = request.URL;if ([url.scheme isEqualToString:@'YourCustomProtocol']) {return [self onMyRequest:request];}return YES;}這種做法實質(zhì)上就是將函數(shù)調(diào)用命令轉(zhuǎn)化為 url,通過請求的方式通知 app 層,其中 onMyRequest: 是自定義的 request 響應函數(shù)。為了發(fā)送請求,js 層要建立一個隱藏的 iframe 元素,每次發(fā)送請求時修改 iframe 元素的 src 屬性,app 即可攔截到相應請求。
12345678910111213/*** js 向 native 傳遞消息* @method js_* @memberof JSToNativeIOSPolyfill* @public* @param str {String} 消息字符串,由 HybridMessage 轉(zhuǎn)換而來*/JSToNativeIOSPolyfill.prototype.js_ = function (str) {if (!this.ifr_) {this._prepareIfr();}this.ifr_.src = 'YourCustomProtocol://__message_send__?msg=' + encodeURIComponent(str); }當 app 執(zhí)行完 js 調(diào)用的功能,執(zhí)行結(jié)果無法直接返回,為了返回結(jié)果,普遍采用回調(diào)函數(shù)方式——js 層記錄一個 callback,app 通過 UIWebView 的 函數(shù)調(diào)用這個 callback(類似 jsonp 的機制)。注意,這樣封裝的接口,天然是異步接口。
因為 js_ 這個函數(shù)會立即返回,不會等到執(zhí)行結(jié)果發(fā)回來。所以,我們要想辦法把 js 代碼“阻塞”住。
請回憶一下,js 中是用什么方法能把 UI 線程代碼“阻塞”住,同時又不跑滿 CPU?1234var async = false;var url = '網(wǎng)頁 10.requst對象方法 .獲取客戶ip地址:request.ip .獲取上傳的文件:request.files 11.啟動腳本package.json package.json用于指定app信息,nodejs版本號和其他組件的依賴關(guān)系 { "name": "demo", "description": "my first express app", "version": "0.0.1", "dependencies": { "express": "3.x" } } 12.app入口app.js app.js主要包含文件請求時,服務器端就到public目錄尋找這個文件 如:<link href="/bootstrap/css/bootstrap.css" rel="stylesheet">, 服務器端就到public/bootstrap/css/目錄中尋找bootstrap.css文件。
android怎樣調(diào)用js文件里面的方法
如果多個線程同時訪問一個集合,而其中至少一個線程修改了該集合,那么它必須 保持外部同步。這通常是通過對自然封裝該集合的對象執(zhí)行同步操作來完成的。如果不存在這樣的對象,則應該使用 Collections.synchronizedSet 方法來“包裝”集合。最好在創(chuàng)建時完成這一操作,以防止對 HashSet 實例進行意外的不同步訪問:
Set s = Collections.synchronizedSet(new HashSet(。));
Angular目前比較大, 100+K,內(nèi)嵌還勉強,如果遠端頁面就有點大了。
我們的應用場景比較特殊,和Native交互非常多, 架構(gòu)模式也不是單頁面應用,而是一個頁面一個WebView,所以很多angular的特性用不到。很多頁面,業(yè)務形態(tài)很簡單,只是簡單的展示,用angular的綁定大材小用。
不支持服務端渲染。在某些奇葩機型上, #hash識別會出問題,導致WebView 404, 要hack。
優(yōu)點:在我接手之前,整個項目是無架構(gòu)模式,沒有任何復用性。接手后,迅速用angular架構(gòu)起框架, 移植代碼,把底層邏輯封裝完成開發(fā)人員業(yè)務層的代碼非常之簡單,開發(fā)效率高在這過程中, 學習了angular的很多理念,讓團隊在AOP單元測試,組件化等方面的有不錯的認知。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:3.222秒