2011-08-13 81 views
8

我注意到Facebook會這樣做,他們在<head>標記中包含的<noscript>中包含元刷新。他們使用它來檢測用戶代理是否啓用了javascript。在<head>內使用<noscript>:好主意還是壞主意?

我們有2個原因考慮使用這種方法:

  1. 要自動重定向到如Facebook做一個網站的非JS優化版本。
  2. 要包含一個非js樣式表,希望禁用javascript僅錨點以及CSS3投訴瀏覽器的手指指針,淡出這些按鈕使其更明顯,它們被禁用(而非工作)。

由於上述原因,是否會使用這種方法會導致任何會影響大部分用戶代理的負面影響?

+0

即使我注意到了這一點,並且我一直在生產站點上使用它來將用戶發送到非JS頁面,要求他們更新瀏覽器或啓用JS或可能的JS,但我一定會喜歡瞭解替換和缺陷這個方法,upvoting問題 – Kumar

+0

建議使用有效的html,例如,我解析了PHP中頭部有NOSCRIPT標籤的HTML時出現問題。 – ZiTAL

回答

6

不,不應該有通過在頭部使用<noscript>標籤的任何大手大腳的不良影響。

儘管如此,也有一些缺點<noscript>

  • 如果瀏覽器不支持JavaScript,或者它僅適用,如果它被禁用。如果Javascript被防火牆阻止,<noscript>標籤的內容將不可見。
  • Javascript支持很差的用戶代理仍然會忽略<noscript>內容。
  • 儘管大多數瀏覽器頭部支持<noscript>,但它在技術上無效X(HTML),因此您的頁面可能無法驗證。

IMO,你想要做的是一件很好的事情,並且是標籤的適當使用。但是,更好的解決方案是在Javascript中使用功能檢測來啓用Javascript功能,而不是使用<noscript>來禁用它們。

如果您依賴於HTML5功能,我會爲此推薦Modernizr庫。

3

對於第二個,我推薦使用的最初給你的<html>元素類的no-js,然後用JavaScript立即移除類,並與一類js替換它的方法(或者包括像Modernizr庫,自動執行此操作)。這樣,您可以通過在.js.no-js之前加上這些樣式作爲前綴,將CSS樣式定位到啓用和禁用JavaScript情境。

這樣的事情,例如:

.js span.javascriptOnlyAnchor { cursor: pointer; text-decoration: underline; } 

.no-js span.javascriptOnlyAnchor { display: none; } 

保羅愛爾蘭更多地談論這裏:http://paulirish.com/2009/avoiding-the-fouc-v3/

+0

在輸出緩衝區的哪個點你推薦實際運行js?在腦袋裏?身體後?當js重新執行html時,html(理想情況下)仍然會打開,這個事實不會產生問題嗎?我不會安裝庫,但會自定義編碼。 –

+0

這是少數幾次當頭腦中的一小部分JavaScript是一個好主意的時候。否則,你仍然容易受到未經稱呼(或在這種情況下是錯誤的)內容的閃光。 –

相關問題