成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

富應(yīng)用中 URL 管理以及 Javascript 測(cè)試

kid143 / 677人閱讀

摘要:一個(gè)是使用錨鏈接,即的方式實(shí)現(xiàn)。做程序的人大多了解測(cè)試。傳統(tǒng)的測(cè)試方法就是在完成后手動(dòng)去觸發(fā)事件,然后手動(dòng)輸入來(lái)檢測(cè)是否得到預(yù)期的效果。引入了測(cè)試框架后工作簡(jiǎn)單了很多。前篇傳送門給自己挖個(gè)坑,開始去開發(fā)富應(yīng)用框架從的源碼開始說(shuō)事件模型

URL 存在的意義在于使用者可以使用一段字符串就可以找到對(duì)應(yīng)的資源。富應(yīng)用中的內(nèi)容改變都是通過(guò) Javascript 去改變文檔內(nèi)容,某種角度上來(lái)說(shuō)整個(gè)網(wǎng)站其實(shí)只需要一個(gè) URL。如果真的使用同一個(gè)URL的話,用戶就無(wú)法快速的通過(guò)特定字符串進(jìn)入他想到達(dá)到資源。就像搜索引擎的表單都是 GET 而不是 POST,你可以把你搜索結(jié)果的鏈接發(fā)給你的朋友,然后他們也可以看到相同的內(nèi)容。于是必須允許 URL 變化。

URL 變化卻不會(huì)讓網(wǎng)頁(yè)從新載入只有兩種方法。一個(gè)是使用錨鏈接,即 http://url/#path 的方式實(shí)現(xiàn)。另一種就是需要瀏覽器支持的 history.pushState ,后者 github 有使用,Pajax 方案也是使用了這種方法。由于是寫的第一版,目前只實(shí)現(xiàn)了錨鏈接的實(shí)現(xiàn)。

相關(guān)代碼傳送門:https://github.com/HaiyiYun/VintJS/blob/master/src/location.js

由于 URL 改變后瀏覽器沒有觸發(fā)新的請(qǐng)求,就意味著你需要通過(guò) Javascript 去知道 URL 發(fā)生了變化。HTML5 的規(guī)范中同時(shí)規(guī)定了onhashchange 的方法,老式的瀏覽器和 IE 的 documentMode 下面都不支持,于是就需要使用 setInterval 方法來(lái)不斷的讀取當(dāng)前 url ,如果 url 發(fā)生了變化就要觸發(fā)相應(yīng)的事件。之前的事件模型在這里又派上了用途。直接 this.trigger("urlChange") 便完成了這里的工作,而不需要去考慮路由的代碼或者其他地方的代碼。

此時(shí)還需要的工作就是去解析新的 URL ,先獲取當(dāng)前的絕對(duì)地址,然后去解析。具體參考 __checkUrl 的源碼。分成當(dāng)前的 path ,這個(gè)會(huì)影響當(dāng)前使用的路由,還有就是 search 的對(duì)象。這一塊的代碼是在閱讀了 Angularjs 的基礎(chǔ)上完成的,同時(shí)也引用了 Angularjs 的 hash_prefix 設(shè)置。谷歌開發(fā)文檔中有提到 Ajax Url 的規(guī)則,傳送門:https://developers.google.com/webmasters/ajax-crawling/docs/getting-started?hl=zh-CN ,#! 的規(guī)則是比較友好的做法,所以預(yù)留了這個(gè)設(shè)置。

完成解析工作后要做的就是去試著改變 URL。直接改變 URL,其中還包括 location.herf = "xxx" 和 location.replace("xxx") 兩種方式的區(qū)別。一種會(huì)在瀏覽器的歷史記錄里面留下痕跡,一種不會(huì)。然后需要改變 path ,改變 search 的對(duì)應(yīng)的方法,還有就是獲取當(dāng)前 url 、 path 、 search 的方法。

這些都完成之后, URL 相關(guān)的功能基本上就告一段落。接下來(lái)要做的就是路由,將當(dāng)前的 path 解析至對(duì)應(yīng)的路由上面去并去渲染頁(yè)面。


華麗麗的分隔符后開始說(shuō)說(shuō) javascript 的測(cè)試。

做程序的人大多了解測(cè)試。寫完一個(gè)函數(shù)后就去測(cè)試一下,看看寫出來(lái)的代碼是不是能夠達(dá)到自己預(yù)期的目標(biāo)。瀏覽器的 javascript 除了要驗(yàn)證函數(shù)的輸入是否覆蓋全面、結(jié)果是否等于預(yù)期,還需要防止自己的代碼在一些特定的瀏覽器上面存在bug。傳統(tǒng)的測(cè)試方法就是在完成后手動(dòng)去觸發(fā)事件,然后手動(dòng)輸入來(lái)檢測(cè)是否得到預(yù)期的效果。在接觸具體的測(cè)試框架前,我自己的做法常常是在代碼里面寫一些測(cè)試的代碼,然后輸出檢測(cè)是否和預(yù)期相同。這種的問題就是如果需要檢驗(yàn)多種瀏覽器的話,工作比較累贅。

引入了測(cè)試框架后工作簡(jiǎn)單了很多。例如 Qunit,jasmine, 我現(xiàn)在用的是 jasmine ,傳送門:http://pivotal.github.io/jasmine/ 。寫完一個(gè)方法,然后寫一些簡(jiǎn)單的測(cè)試用例,在所有瀏覽器上面允許就可以知道結(jié)果。而無(wú)需自己去手動(dòng)觸發(fā)或者是寫代碼輸出然后去比照。


前篇傳送門:

給自己挖個(gè)坑,開始去開發(fā)javascript富應(yīng)用框架

從 BackboneJS 的源碼開始說(shuō)事件模型

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77943.html

相關(guān)文章

  • 推薦輕量高效無(wú)依賴的開源JS插件和庫(kù)

    摘要:彈出層是一個(gè)輕量級(jí)的庫(kù)用于管理工具提示和彈窗效果。一個(gè)帶有的跨瀏覽器富文本編輯器。由制作,適用于每天寫作的富文本編輯器。輕量的操作庫(kù)。是一個(gè)快速簡(jiǎn)單輕量級(jí)的瀏覽器功能檢測(cè)庫(kù)。它沒有任何的依賴,并且壓縮后僅有。極小跨平臺(tái)的全屏插件。 在這里維持一個(gè)持續(xù)更新的地方 圖片 baguetteBox.js - 是一個(gè)簡(jiǎn)單易用的響應(yīng)式圖像燈箱效果腳本。demo Lightgallery.js -...

    AlphaWallet 評(píng)論0 收藏0
  • 推薦輕量高效無(wú)依賴的開源JS插件和庫(kù)

    摘要:彈出層是一個(gè)輕量級(jí)的庫(kù)用于管理工具提示和彈窗效果。一個(gè)帶有的跨瀏覽器富文本編輯器。由制作,適用于每天寫作的富文本編輯器。輕量的操作庫(kù)。是一個(gè)快速簡(jiǎn)單輕量級(jí)的瀏覽器功能檢測(cè)庫(kù)。它沒有任何的依賴,并且壓縮后僅有。極小跨平臺(tái)的全屏插件。 在這里維持一個(gè)持續(xù)更新的地方 圖片 baguetteBox.js - 是一個(gè)簡(jiǎn)單易用的響應(yīng)式圖像燈箱效果腳本。demo Lightgallery.js -...

    lushan 評(píng)論0 收藏0
  • 推薦輕量高效無(wú)依賴的開源JS插件和庫(kù)

    摘要:彈出層是一個(gè)輕量級(jí)的庫(kù)用于管理工具提示和彈窗效果。一個(gè)帶有的跨瀏覽器富文本編輯器。由制作,適用于每天寫作的富文本編輯器。輕量的操作庫(kù)。是一個(gè)快速簡(jiǎn)單輕量級(jí)的瀏覽器功能檢測(cè)庫(kù)。它沒有任何的依賴,并且壓縮后僅有。極小跨平臺(tái)的全屏插件。 在這里維持一個(gè)持續(xù)更新的地方 圖片 baguetteBox.js - 是一個(gè)簡(jiǎn)單易用的響應(yīng)式圖像燈箱效果腳本。demo Lightgallery.js -...

    shuibo 評(píng)論0 收藏0
  • javascript功能插件大集合,寫前端的親們記得收藏

    摘要:一個(gè)專注于瀏覽器端和兼容的包管理器。一個(gè)整合和的最佳思想,使開發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。完全插件化的工具,能在中識(shí)別和記錄模式。健壯的優(yōu)雅且功能豐富的模板引擎。完整的經(jīng)過(guò)充分測(cè)試和記錄數(shù)據(jù)結(jié)構(gòu)的庫(kù)。 【導(dǎo)讀】:GitHub 上有一個(gè) Awesome – XXX 系列的資源整理。awesome-javascript 是 sorrycc 發(fā)起維護(hù)的 JS 資源列表...

    cfanr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<