javascript不可用的問(wèn)題探究
我第一次遇到這個(gè)問(wèn)題還是在DHTML盛行的時(shí)代. 我們對(duì)瀏覽器無(wú)所不用其極, 加上各種動(dòng)畫(huà)菜單、3D標(biāo)簽(我們現(xiàn)在已經(jīng)學(xué)會(huì)不再使用這些了), 但總有人告訴我們javascript不可用.
誰(shuí)禁用了javascript
第一個(gè)要問(wèn)的問(wèn)題是這些javascript不可用的環(huán)境在哪里. 下面是一些可能的答案:
安全系統(tǒng)比如noscript或者公司代理過(guò)濾掉了javascript;
功能手機(jī)比如舊式黑莓(我還記得將舊式黑莓換到Opera Mini以獲得總算還過(guò)得去的上網(wǎng)體驗(yàn));
在移動(dòng)應(yīng)用環(huán)境中, 圖片和腳本有時(shí)候會(huì)被拆分處理;
在流量有限或者接入很慢的區(qū)域中;
人們因?yàn)閭€(gè)人原因禁用了javascript;
討厭廣告彈出等強(qiáng)勢(shì)廣告的人.
就像你所看到的那樣, javascript被禁用的原因多種多樣, 有被動(dòng)的, 也有主動(dòng)的. 所以不能說(shuō)只有亂用網(wǎng)絡(luò)的人才會(huì)遭遇這樣的問(wèn)題.
為什么javascript會(huì)被禁用
像上面所列舉的那樣, javascript被禁用的原因多種多樣. 如果它是被有意禁用的, 那么我猜主要原因無(wú)非以下三點(diǎn), 即安全考慮、廣告疲勞以及慢速連接.
安全考慮在情理之中. 幾乎每一個(gè)在客戶(hù)端的攻擊都是使用的javascript(大多數(shù)情形下都是利用了插件的漏洞). Java當(dāng)然是當(dāng)前最大的安全漏洞, 但是通過(guò)javascript同樣會(huì)對(duì)存在漏洞的網(wǎng)站或者不經(jīng)保護(hù)或者過(guò)時(shí)的瀏覽器以及操作系統(tǒng)造成安全威脅.
慢速連接是個(gè)很有意思的原因. 非常諷刺的是, 我們使用javascript是為了加速客戶(hù)端體驗(yàn). 最初使用js的一個(gè)例子就是在客戶(hù)端對(duì)表單進(jìn)行驗(yàn)證從而避免服務(wù)器端不必要的工作周期.
如果你現(xiàn)在正處于一個(gè)很差的連接中(比如一個(gè)無(wú)線連接或者很差的3G連接), 你想要使用Google Reader或者Gmail, 你只能得到一個(gè)不完整的頁(yè)面, 這時(shí)候只有使用低版本的才能更好工作.
為了兩方都好
基于環(huán)境以及連接給用戶(hù)最好的體驗(yàn)是非常好的. 這也是漸進(jìn)增強(qiáng)(progressive enhancement)所研究的問(wèn)題. 這也并非是很高深的東西, 它很簡(jiǎn)單, 并且是處于完全的實(shí)用主義.
使用事件授權(quán)這樣的技術(shù)是非常簡(jiǎn)單的. 你可以通過(guò)點(diǎn)擊父元素的handlers來(lái)寫(xiě)你自己的HTML, 使用innerHTML或者其他一些更新更快的技術(shù).
為什么是這樣一個(gè)問(wèn)題
坦白說(shuō), 我也不太清楚. 或許是因?yàn)槲姨^(guò)時(shí)了, 或許是因?yàn)槲乙呀?jīng)一次有一次對(duì)瀏覽器和網(wǎng)絡(luò)連接失望了, 或許是因?yàn)槲抑幌敫踩恍? 我只是不明白為什么人們只想要js的解決方案呢, 而實(shí)際上, js只是用來(lái)提供一些增強(qiáng)功能的.
費(fèi)解的應(yīng)用邊緣案例
人們時(shí)常懷有疑問(wèn)的是"應(yīng)用需要javascript". 如果我們足夠坦誠(chéng), 我們就會(huì)發(fā)現(xiàn), 這樣的應(yīng)用實(shí)際上是很少的. 如果一定要說(shuō)出一些, 我只能想到的是瀏覽器中的photoshop或者其他的一些編輯器(比如視頻、瀏覽器中的IDE)才需要依賴(lài)于javascript. 其他都可以通過(guò)重新加載和服務(wù)器端的一些部件解決.
讓我們直面這樣一個(gè)事實(shí)——在Node.js的時(shí)代, 服務(wù)器端也可以用javascript來(lái)寫(xiě). Dav Glass of Yahoo兩年前顯示如果一個(gè)工具庫(kù)編寫(xiě)成余環(huán)境獨(dú)立的, 那么你就可以同時(shí)在客戶(hù)端和服務(wù)器端復(fù)用這些工具.
"應(yīng)用需要javascript"的真正原因似乎是其他原因, 而非技術(shù)上的.
"應(yīng)用需要javascript"的真正原因
正如禁用javascript可以有很多原因, 應(yīng)用需要javascript也有很多原因.
你只知道js并且認(rèn)為人們就應(yīng)該升級(jí)他們的瀏覽器. 這無(wú)可厚非, 但是這樣的看法是很狹隘的, 并且很容易失敗.
和你一起構(gòu)建應(yīng)用的團(tuán)隊(duì)沒(méi)有服務(wù)器端的技能, 你希望能以較低的代價(jià)完成這個(gè)應(yīng)用. 這或許有效, 但是這樣可能讓開(kāi)發(fā)時(shí)間和資金都加倍. 要提前為這樣的開(kāi)發(fā)做好規(guī)劃.
你想要盡快寫(xiě)出應(yīng)用, 并且你知道以后你會(huì)重寫(xiě)這個(gè)應(yīng)用的. 這是很常見(jiàn)的現(xiàn)象, 尤其是你可以因此而成功. 愿上天保佑你吧, 千萬(wàn)別讓人知道你會(huì)待很久.
你的應(yīng)用會(huì)在一個(gè)純js的環(huán)境中運(yùn)行. 這當(dāng)然意味著你沒(méi)必要不使用js而完成你的應(yīng)用. 一個(gè)很好的例子就是Air applications. 但你要保證這個(gè)環(huán)境在將來(lái)不出問(wèn)題.
你的應(yīng)用確實(shí)需要js來(lái)運(yùn)行. 如果真是這樣的情況, 就別將它提供給沒(méi)有js的用戶(hù). 向人們解釋為什么以及如何做(盡量避免告訴人們他們需需要開(kāi)啟js因?yàn)樗麄兛赡芨咀霾涣硕邮? 并利用js重定向到你的應(yīng)用.
總結(jié)
總之, javascript依賴(lài)性的問(wèn)題不只是技術(shù)原因. 它對(duì)舊的技術(shù)實(shí)踐提出了疑問(wèn), 并且對(duì)于可維護(hù)性有很大影響.
可以說(shuō), 如果我們能問(wèn)問(wèn)"我們?yōu)槭裁葱枰猨s"而不是問(wèn)"人們?yōu)槭裁礇](méi)有js", 關(guān)于這個(gè)問(wèn)題的討論會(huì)更有成效. 如果我們的技術(shù)能很好適應(yīng)不同需求的話, 去責(zé)備人們跟不上網(wǎng)絡(luò)發(fā)展是毫無(wú)意義的.
通過(guò)展現(xiàn)給用戶(hù)看他們能通過(guò)開(kāi)啟或者關(guān)閉瀏覽器中部件來(lái)解決問(wèn)題同樣是沒(méi)有意義的. 當(dāng)一個(gè)普通用戶(hù)卡在你的應(yīng)用中了, 這并不是一個(gè)告訴用戶(hù)發(fā)生了什么的做法.
或許所有這些問(wèn)題在node變得成熟以及普及以后都不會(huì)再是問(wèn)題. 我將很樂(lè)意看到這點(diǎn).
原文鏈接:That "javascript not available" case
相關(guān)文章
layui 實(shí)現(xiàn)表格某一列顯示圖標(biāo)
今天小編就為大家分享一篇layui 實(shí)現(xiàn)表格某一列顯示圖標(biāo)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
基于rem的移動(dòng)端響應(yīng)式適配方案(詳解)
下面小編就為大家?guī)?lái)一篇基于rem的移動(dòng)端響應(yīng)式適配方案(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
JS實(shí)現(xiàn)多級(jí)菜單中當(dāng)前菜單不隨頁(yè)面跳轉(zhuǎn)樣式而發(fā)生變化
本文介紹了JQuery巧妙實(shí)現(xiàn)多級(jí)菜單中當(dāng)前菜單不隨頁(yè)面跳轉(zhuǎn)樣式發(fā)生變化,實(shí)現(xiàn)方法非常簡(jiǎn)單,感興趣的朋友一起看看吧2017-05-05
Javascript 生成指定范圍數(shù)值隨機(jī)數(shù)
查手冊(cè)后才知道, 介紹的信息少得可憐吶, 沒(méi)有介紹生成 m-n 范圍的隨機(jī)數(shù)..., 就只是給你一個(gè) Math.random() 了事.2009-01-01
javascript基于定時(shí)器實(shí)現(xiàn)進(jìn)度條功能實(shí)例
這篇文章主要介紹了javascript基于定時(shí)器實(shí)現(xiàn)進(jìn)度條功能,簡(jiǎn)單分析了javascript定時(shí)器的功能、使用方法并給出了基于定時(shí)器實(shí)現(xiàn)的進(jìn)度條功能實(shí)例,需要的朋友可以參考下2017-10-10
layui內(nèi)置模塊layim發(fā)送圖片添加加載動(dòng)畫(huà)的方法
今天小編就為大家分享一篇layui內(nèi)置模塊layim發(fā)送圖片添加加載動(dòng)畫(huà)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
JavaScript數(shù)組去重的幾種方法效率測(cè)試
JavaScript數(shù)組去重是前端面試酷愛(ài)的問(wèn)題,問(wèn)題簡(jiǎn)單而又能看出程序員對(duì)計(jì)算機(jī)程序執(zhí)行過(guò)程的理解如何。數(shù)組去重的方法有很多,到底哪種是最理想的我不清楚。于是我測(cè)試了下數(shù)組去重的效率。測(cè)試二十萬(wàn)個(gè)數(shù)據(jù),隨著數(shù)據(jù)越多效率很明顯的就體驗(yàn)了出來(lái)。下面來(lái)一起看看吧。2016-10-10
js正文內(nèi)容高亮效果的實(shí)現(xiàn)方法
這篇文章介紹了js正文內(nèi)容高亮效果的實(shí)現(xiàn)方法,有需要的朋友可以參考一下2013-06-06

