先簡(jiǎn)單介紹一下這款輸入法。(如果還沒(méi)有用過(guò)的,建議先用一下,因?yàn)樘拍钚粤耍皇俏規(guī)拙湓捘苷f(shuō)清的)最大的優(yōu)點(diǎn)莫過(guò)于詞庫(kù)的存儲(chǔ)與運(yùn)算均放在服務(wù)端上,降低本機(jī)資源開銷(比如不需要更新本地詞庫(kù)),只要能上網(wǎng)就能使用這款輸入法(比如網(wǎng)吧)而其缺點(diǎn)也是很明顯的:過(guò)于依賴網(wǎng)速;每次僅能用于一個(gè)網(wǎng)頁(yè)(區(qū)分于多頁(yè)面瀏覽器);不支持個(gè)性化(cookie安全限制)即使如此,作為一款概念性的云輸入法,還是挺值得一試的,畢竟云在天上飄了那么久,這款產(chǎn)品也算是一個(gè)實(shí)實(shí)在在的雨滴了,^_^
好了,開始進(jìn)入主題吧。
本篇文章的主要內(nèi)容是:從前端開發(fā)的角度,剖析輸入法的JS文件,從而達(dá)到學(xué)習(xí)的目的。
(暫時(shí)這么理解吧,從我個(gè)人角度講,就是想看看別人怎么做的,不一定符合廣大觀眾的興趣)
首先來(lái)大概理解一下輸入法的執(zhí)行流程。
安裝:通過(guò)右鍵添加一個(gè)鏈接到收藏夾,而這個(gè)鏈接不是普通的http鏈接,而是一個(gè)JavaScript語(yǔ)句
執(zhí)行:點(diǎn)擊收藏夾,執(zhí)行JavaScript語(yǔ)句,對(duì)當(dāng)前頁(yè)面進(jìn)行輸入監(jiān)控
關(guān)閉:既然是通過(guò)JavaScript來(lái)啟動(dòng)界面的,那么關(guān)閉的原理也是一樣。
刪除:直接刪除收藏夾鏈接即可,
那么,接下來(lái),先分析一下安裝:
首先是左鍵點(diǎn)擊時(shí)出發(fā)的leftclick是提醒用戶正確的安裝方法是右鍵,然后添加到收藏夾(這個(gè)用戶體驗(yàn)還是挺好的,畢竟用戶都習(xí)慣左鍵點(diǎn)擊了)
接著就是href屬性了,也就是添加到收藏夾的執(zhí)行代碼,這里唯一值得關(guān)注的是為什么執(zhí)行函數(shù)要用void函數(shù)包起來(lái)呢?
查看一下文檔,看看void的用處:
void 運(yùn)算符對(duì)表達(dá)式求值,并返回 undefined。在希望求表達(dá)式的值,但又不希望腳本的剩余部分看見這個(gè)結(jié)果時(shí),該運(yùn)算符最有用。
寫一個(gè)測(cè)試代碼:
從全局來(lái)看,加入這個(gè)void來(lái)達(dá)到忽略返回值的目的是挺有意思的,畢竟不能保證代碼里面不產(chǎn)生返回值,要是你在看一個(gè)網(wǎng)頁(yè),然后你啟動(dòng)輸入法,輸入法卻把你的頁(yè)面給跳轉(zhuǎn)了,這個(gè)用戶體驗(yàn)是很不好滴(比如說(shuō)你在寫博,突然頁(yè)面跳轉(zhuǎn)了,當(dāng)你返回去的時(shí)候,發(fā)現(xiàn)你寫的東東全不見)。
從我個(gè)人角度來(lái)看,使用這小小的void函數(shù)也就意味著增加了代碼的容錯(cuò)能力,提高用戶體驗(yàn)。
接著還有一個(gè)可以學(xué)習(xí)的地方,就是一個(gè)匿名函數(shù)寫完了之后需要馬上執(zhí)行,格式是:(function(){..})()
下面來(lái)分析主要的啟動(dòng)代碼:
代碼:
判斷的邏輯有點(diǎn)復(fù)雜,但如果把這兩個(gè)文件下載進(jìn)行分析便得知,這兩個(gè)文件內(nèi)容是一樣的,只是編碼不同而已(一個(gè)是UTF-8,一個(gè)是GBK)
主要作用是根據(jù)網(wǎng)頁(yè)編碼來(lái)選擇,避免亂碼,但是這里的代碼邏輯為何這么復(fù)雜呢(先判斷是否為IE,然后判斷IE8特有的document.documentMode屬性,最后判斷IE6+特有的document.charset)?
簡(jiǎn)單地說(shuō),IE6/IE7&&utf-8編碼的采用utf-8編碼的文件,其它的采用GBK編碼文件,這樣不禁就會(huì)聯(lián)想到:在FF/chrome/IE8中,網(wǎng)頁(yè)采用utf-8編碼,下載腳本卻是GBK編碼,這樣是否會(huì)存在問(wèn)題呢?
實(shí)際測(cè)試的時(shí)候,當(dāng)然沒(méi)有問(wèn)題了,但是瀏覽器怎么判斷文件編碼的呢,這里我沒(méi)有查閱相關(guān)資料,但能猜到原理:
- 這個(gè)倒是需要相當(dāng)?shù)慕?jīng)驗(yàn)積累啊~~
最后,函數(shù)的最后三句是挺經(jīng)典的動(dòng)態(tài)載入腳本代碼,可以封裝成一個(gè)函數(shù)日后備用(缺點(diǎn)是不支持回調(diào)函數(shù))。
轉(zhuǎn)自:http://www.cnblogs.com/wslcn/