2011-03-21 64 views
8

當用戶沒有啓用JavaScript時,最好的做法是什麼?向那種用戶提供內容的最佳方式是什麼?搜索引擎保持網站可讀性的最佳方式是什麼?Web開發最佳實踐 - 如何支持JavaScript禁用

我能想到的兩種方式來實現這一點,但不知道什麼是更好的(或者如果第三個選項是更好):

  1. 依靠元刷新標籤將用戶重定向到一個非網站的JavaScript版本。將元刷新標記封裝在noscript標記中,以便那些使用javascript的用戶將忽略它。
  2. 依靠位於body標籤內的iframe標籤提供非JavaScript版本的網站。將iframe標記包裹在noscript標記中,以便那些使用javascript的用戶將忽略它。

我也很喜歡正確或不正確的方式來做到這一點的高調例子。

---------除了問題-----------

下面是我在過去所做的那樣,解決這樣一個例子:http://photocontest.highpoint.edu/

我想確保沒有更好的方法來做到這一點。

+2

如果你編碼的JavaScript,然後思考,沒有它做什麼,你就錯了。 – BoltClock 2011-03-21 12:41:27

+1

最好的方法是[逐步增強](http://en.wikipedia.org/wiki/Progressive_enhancement)。或者你忽略非JavaScript用戶。 – 2011-03-21 12:41:37

+0

和優雅的降級 – Guillaume86 2011-03-21 12:42:25

回答

4

你說的是優雅降級:建築設計,使網站使用JavaScript工作,那麼使網站還使用JavaScript工作關閉。最簡單的做法是在頁面頂部的某處附近放置html「noscript」標籤,該標籤會提供一條消息,說明該網站需要JavaScript或其他東西不能正常工作。 SO就是一個很好的例子。屏幕頂部的大部分按鈕都是通過javascript運行的。把它關掉,你會得到一個不錯的紅色橫幅,下降的js效果消失了。

我喜歡漸進式增強開發。無需javascript/flash/css3 /其他任何東西即可獲得完整的網站,然後通過一點一滴的增強(仍然包含noscript標籤)來改善用戶體驗。這可以確保您擁有一個完整的可讀網站,無論您是擁有屏幕閱讀器還是搜索引擎的禁用用戶,同時爲擁有較新瀏覽器的用戶提供良好的用戶體驗。底線:對於任何動態生成的內容(例如通過AJAX生成的頁面元素),必須有一個靜態頁面替代方案,其中此內容必須通過標準鏈接可用。如果您將JavaScript用於標籤式內容,則以與網頁其餘部分保持一致的方式顯示所有內容。

一個例子是http://www.bbc.co.uk/news/關閉JavaScript,你有一個完整的書面內容,圖片,鏈接等頁面。打開JavaScript,你會得到滾動新聞報道,標籤式內容,滾動圖片等。

我要淘氣又帖子的鏈接到維基百科:

Progressive Enhancement

Graceful Degredation

+0

謝謝你的真實世界的例子。 – Teddy 2011-03-21 13:06:13

+0

+1進步增強 – 2011-03-21 21:45:20

1

你有另一種選擇,只是加載相同的頁面,但使它爲無腳本用戶(漸進增強/優雅劣化)工作。

一個簡單的例子: 你想要的內容加載到與阿賈克斯一格,使一個<a>標籤鏈接到與新的內容(無腳本行爲)完整的頁面並綁定<a>標籤使用jQuery攔截點擊和負載ajax(腳本行爲)。

$('a.ajax').click(function(){ 
var anchor = $(this); 
$('#content').load(anchor.attr('href') + ' #content'); 
return false; 
}); 
1

我不完全確定漸進增強是否被認爲是目前最好的做法,但這是我個人喜歡的方法。在這種情況下,您需要編寫服務器端代碼,使其功能類似於標準Web 1.0 Web應用程序(無JavaScript),以便爲系統提供至少足夠的功能,以便在沒有JavaScript的情況下工作。然後,您就可以在此基礎上開始對JavaScript功能進行分層,以使系統更加便於用戶使用。如果正確完成,最終應該提供一個Web應用程序,該應用程序至少可以提供足夠的功能,以便對非JavaScript用戶有用。

一個相關的過程被稱爲Graceful Degradation,它以類似的方式工作,但是首先假設用戶啓用了JavaScript,並構建了他們不使用的情況下的變通方案。然而,這有一個缺點,如果你忽略了一些東西,你可以讓一個非JavaScript用戶沒有回退。

搜索頁面的漸進式增強示例:構建您的搜索頁面,以便它通常只返回搜索結果的HTML頁面,但也添加一個可以通過GET設置的標誌,設置時返回XML或JSON 。在搜索頁面上,包含一個腳本,該腳本對搜索頁面執行AJAX請求,同時將標記附加到查詢字符串上,然後用AJAX調用的結果替換頁面的主要內容。 JavaScript用戶可以獲得AJAX的好處,但那些沒有JavaScript的用戶仍然可以獲得可行的搜索頁面。

http://en.wikipedia.org/wiki/Progressive_enhancement

1

如果您的應用程序必須了JavaScript的功能則沒有什麼可以做,除了向他們展示在無標籤標記中的禮貌消息。

否則,你應該思考另一種方式。

  1. 建立您的網站沒有JS
  2. 給真棒用戶體驗,並使其充分功能
  3. 添加JS,使UX更實用。頂層JS層。

因此,如果用戶沒有JS,您的網站仍然會恢復到您的網站狀態的第二步。

至於抓取。如果你的網站依賴於AJAX和大量的JS工作,你可以讓gogole知道它:http://code.google.com/web/ajaxcrawling/docs/getting-started.html

+0

謝謝! Google Ajax網站抓取指南將會很有幫助。 – Teddy 2011-03-21 13:03:50

1

一個快速提示,可以幫助你:只需安裝lynx,一個命令行web瀏覽器,你會立即看到谷歌和其他SEO如何看你的網站(也是盲人)。這非常有用。當然,在命令行窗口中,沒有圖形,javascript被禁用。

1

如果你在做「嚴肅」的Ajax(例如,客戶端的路由)以下的技術可能是有用的:「?」

  1. 所使用的網址沒有GET/- 參數(它使您的生活更輕鬆稍後)
  2. 使用http://baseurl.com/#!/path/to/resource對客戶端路由
  3. http://baseurl.com/path/to/resource
  4. 中實現呈現非腳本HTML版本的網站(HTML快照是谷歌稱之爲的)在noscript-tags中包含HTML快照的全部內容,並通過top.location.href重定向到完整版的網站
  5. 手柄http://baseurl.com/?_escaped_fragment=/path/to/resource - 它應該通過301響應重定向到http://baseurl.com/path/to/resource
  6. 使用標籤只爲GET鏈接,用於POST/PUT/DELETE鏈接使用形式 - 如果有必要

一個unstyle了地獄,他們的對於鏈接很好的例子代碼,我發現,而研究「怎樣寫正確的Ajax代碼」:

<a href="/path/to/resource" onclick="Routing.navigate(&quot;/path/to/resource&quot;); return false;">Resource</a> 

當然,這是一個相當複雜的解決方案,但它應該同時啓用搜索引擎優化(包括非搜索引擎爬蟲)和可訪問性。問題是你必須能夠呈現你的頁面服務器和客戶端。

一個解決方案可能是使用像鬍子一樣的模板框架,其中存在用於不同平臺的實現。

  1. 使用類似{{#pagelet}} /路徑/到/部分{{/小頁}}爲頁面的動態部分 - 例如:{{#pagelet}} /圖像/ {{image_id}}在您的客戶端渲染中,pagelet將被實現爲通過Ajax加載的動態代碼(例如:render)
  2. 在您的服務器端渲染中,pagelet將會直接渲染(不確定只是蜷縮頁面並立即渲染它) - 或者如果你可以異步編寫代碼,就像做客戶端一樣:將一些臨時跨度寫入緩衝區,開始獲取所有頁面小部件,替換作爲小頁面到達並沖洗的臨時跨度所有pagelet都被渲染後的緩衝區。

這是迄今爲止我發現的最好的通用設計。你可以深入鏈接到你的應用程序,這是搜索引擎友好的,它應該強制你建立一個正常降級的頁面。

P.S .:上述技術的一個優點是,頁面的Ajax和「Web 1.0」呈現可以從整個小頁面的memcached緩存中獲益。

+0

感謝所有偉大的建議! – Teddy 2011-10-25 12:32:01

0

我寧願在沒有javascript的情況下對頁面進行編碼,然後如果啓用了javascript,我們會將用戶重定向到與javascript類似的頁面。 (同樣的概念逐步增強)

redirecting with javascript