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è)在客戶端的攻擊都是使用的javascript(大多數(shù)情形下都是利用了插件的漏洞). Java當(dāng)然是當(dāng)前最大的安全漏洞, 但是通過(guò)javascript同樣會(huì)對(duì)存在漏洞的網(wǎng)站或者不經(jīng)保護(hù)或者過(guò)時(shí)的瀏覽器以及操作系統(tǒng)造成安全威脅.
慢速連接是個(gè)很有意思的原因. 非常諷刺的是, 我們使用javascript是為了加速客戶端體驗(yàn). 最初使用js的一個(gè)例子就是在客戶端對(duì)表單進(jìn)行驗(yàn)證從而避免服務(wù)器端不必要的工作周期.
如果你現(xiàn)在正處于一個(gè)很差的連接中(比如一個(gè)無(wú)線連接或者很差的3G連接), 你想要使用Google Reader或者Gmail, 你只能得到一個(gè)不完整的頁(yè)面, 這時(shí)候只有使用低版本的才能更好工作.
為了兩方都好
基于環(huán)境以及連接給用戶最好的體驗(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)才需要依賴于javascript. 其他都可以通過(guò)重新加載和服務(wù)器端的一些部件解決.
讓我們直面這樣一個(gè)事實(shí)——在Node.js的時(shí)代, 服務(wù)器端也可以用javascript來(lái)寫(xiě). Dav Glass of Yahoo兩年前顯示如果一個(gè)工具庫(kù)編寫(xiě)成余環(huán)境獨(dú)立的, 那么你就可以同時(shí)在客戶端和服務(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的用戶. 向人們解釋為什么以及如何做(盡量避免告訴人們他們需需要開(kāi)啟js因?yàn)樗麄兛赡芨咀霾涣硕邮? 并利用js重定向到你的應(yīng)用.
總結(jié)
總之, javascript依賴性的問(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)給用戶看他們能通過(guò)開(kāi)啟或者關(guān)閉瀏覽器中部件來(lái)解決問(wèn)題同樣是沒(méi)有意義的. 當(dāng)一個(gè)普通用戶卡在你的應(yīng)用中了, 這并不是一個(gè)告訴用戶發(fā)生了什么的做法.
或許所有這些問(wèn)題在node變得成熟以及普及以后都不會(huì)再是問(wèn)題. 我將很樂(lè)意看到這點(diǎn).
原文鏈接:That "javascript not available" case
相關(guān)文章
通過(guò)Javascript將數(shù)據(jù)導(dǎo)出到外部Excel文檔的函數(shù)代碼
通過(guò)Javascript將數(shù)據(jù)導(dǎo)出到外部Excel文檔的函數(shù)代碼,需要的朋友可以參考下2012-06-06javascript關(guān)于復(fù)選框的實(shí)用腳本代碼
javascript關(guān)于復(fù)選框的實(shí)用腳本代碼...2007-08-08JavaScript中實(shí)現(xiàn)無(wú)縫滾動(dòng)、分享到側(cè)邊欄實(shí)例代碼
本文給通過(guò)js代碼實(shí)現(xiàn)無(wú)縫滾動(dòng),側(cè)邊欄效果,在項(xiàng)目中經(jīng)常會(huì)遇到,下面小編把代碼整理分享到腳本之家平臺(tái),供大家參考2016-04-04JavaScript設(shè)計(jì)模式之代理模式實(shí)例分析
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之代理模式,簡(jiǎn)單描述了代理模式的概念、原理并結(jié)合實(shí)例形式分析了javascript代理模式的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2019-01-01