2012-01-16 55 views
3

我有一箇舊的網站,該網站正確呈現在FF 3.6,IE 7〜8等,但在FF失敗9強制瀏覽器忽略HTML 5個功能

問題是一個古老的(預HTML 5)第三方網站使用JS框架(伍德斯托克)增加了一個HIDDEN屬性一些HTML元素,所以當我看HTML的螢火我看到這樣的代碼:

<table id="foo" hidden=""> 

這些頁面被送達:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

這對於爲HTML 4設計的瀏覽器沒有HIDDEN屬性效果很好。但支持HTML 5的最新瀏覽器會解釋此屬性並隱藏我需要顯示的元素。

修改(不支持的)第三方框架以避免使用HIDDEN屬性將非常困難。

是否有可能強制瀏覽器呈現頁面,就像它們是HTML 4一樣,而不是對HTML 5功能做任何解釋?其他建議歡迎...

+2

XHTML既不是HTML 4也不是5.您可能也在使用MIME類型爲「text/html」的文檔? – deceze 2012-01-16 01:27:17

+0

它被用作text/html(單獨的問題,對嗎?)。我將首先嚐試改變DOCTYPE,正如Zee所建議的那樣。 – 2012-01-16 02:24:44

+0

是的,將XHTML文檔作爲「text/html」服務的問題在於您只是在提供HTML湯。 XHTML應嚴格解釋爲XML,這首先是使用XHTML的好處。爲此,您需要使用'application/xhtml + xml' MIME類型來提供XHTML文檔。 – deceze 2012-01-16 03:17:55

回答

6

IE以外的瀏覽器只實現了一個HTML(當然,除了怪癖模式外)。

但是,所有hidden屬性都會觸發UA樣式表中的某些樣式規則。您可以添加自己的樣式規則來覆蓋這些規則。這些規則需要多複雜取決於框架將元素添加到的元素,但一種綜合方法是從HTML5規範或http://mxr.mozilla.org/mozilla-central/source/layout/style/html.css複製各種display規則,但涉及hidden的規則除外,只需將它們放入您的頁面鏈接到的樣式表。

+0

鮑里斯,隱藏的屬性是通過顯示實現的要求:沒有,因爲它似乎是?問題是相對較低的特異性使得它很容易無意中覆蓋規則。例如,請參閱http://jsfiddle.net/yYemx/1/如果JS是第一次編寫的,並且只在非常情況下運行,並且稍後由其他人添加了CSS,那麼CSS編寫器不太可能知道他們添加的常見規則將會破壞隱藏屬性的使用。 – Alohci 2012-01-16 08:24:36

+1

對於Web瀏覽器,這是一個要求,是的。請參閱http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#hidden-elements這是Web瀏覽器的規範要求。 – 2012-01-16 17:12:29

+0

謝謝。通過使用display:table來定義特定元素來解決問題。不是優雅的,但我在這種情況下的首選選項,因爲它是非常有針對性的,並保證不會混淆其他元素。 – 2012-01-16 22:37:43

2

是的,你應該宣佈正確的DOCTYPE。如果它確實是HTML4,則應該將其聲明爲HTML4,而不是XHTML。

請參閱http://www.w3.org/QA/2002/04/valid-dtd-list.html瞭解您可以使用的不同類型。

+0

謝謝。我會嘗試更改DOCTYPE,並讓它知道它是否有效。 – 2012-01-16 02:21:22