国产视频在线观看一区I97人人艹I久久福利电影I久久综合视频网I国产在线观看99I亚州人成在线播放I91亚洲精品久久久

首頁 > 新聞 > 知識賦能

解決IE瀏覽器不兼容H5標簽的辦法有哪些?

2018-08-22 8833
分享至:

HTML5有兩大特點:首先,強化了Web網頁的表現性能。其次,追加了本地數據庫等Web應用的功能。

廣義論及HTML5時,實際指的是包括HTML、CSS和JavaScript在內的一套技術組合。它希望能夠減少瀏覽器對于需要插件的豐富性網絡應用服 務(plug-in-based rich internet application,RIA),如Adobe Flash、Microsoft Silverlight與Oracle JavaFX的需求,并且提供更多能有效增強網絡應用的標準集。

目前HTML5已向開發人員提供了很多新的標簽,如section,nav,article,header和footer等。這些標簽語義化程度高,會被經常使用,但在IE6,IE7,IE8和Firefox 2等老式瀏覽器中卻不能識別和正常使用。

一、HTML5標簽在瀏覽器展示存在的問題

對于現階段來說,使用HTML5標簽可能遇到的最大問題就是如何在不支持新標簽的瀏覽器中做恰當的處理。當我們在頁面中使用HTML5元素時,可能會得到三種不同的結果。

結果1:標簽被當作錯誤處理并被忽略。那么DOM構建的時候,就會當作這個標簽不存在。

結果2:標簽會被當作錯誤處理,并在DOM構建的時候依然會按照預期的代碼進行創建,并且HTML標簽會被構造成行內元素(也就是說雖然不能識別,但是代碼里section標簽依然會在dom中創建一個對應section節點,但是屬于行內元素)。

結果3:標簽被識別為HTML5標簽,然后用DOM節點對其進行替換。DOM在構建的時候和預想的一致,并且合適的樣式會應用到標簽上(大部分情況下是塊級元素)。

有一個具體的例子,大家思考一下下面的代碼:

title

text

很多瀏覽器(比如Firefox 3.6和Safari4)解析的時候都會將div作為最外層的元素,然后div里面是一個識別不了的元素(section),它會在DOM中創建,并被作 為一個行內元素存在。h1和p元素都是作為section元素的子節點。因為section在DOM中真實存在,所以也可以修改其樣式。這種情況對應結果 2。

IE9之前的版本會認為section標簽是一個錯誤,并直接將其忽略,那么h1和p標簽會被解析,然后成為div標簽的子節點。也會被認為是一個錯誤并直接跳過。在這些瀏覽器中實際有效的代碼是這樣的:

title
text

那么,舊版本的IE瀏覽器除了生成的DOM結構和其他瀏覽器不一樣,其對不可識別標簽的容錯能力還是很棒的。因為section節點沒有在DOM樹中構建,所以也就不能給其增加樣式。這種情況對應結果1。

當然,支持HTML5的瀏覽器比如IE9,Firefox4+,Safari5+會創建正確的DOM結構,然后這些標簽會默認附帶HTML5規范中定義的默認樣式。

那么,我們所面臨的最大問題就是同樣的代碼在不同的瀏覽器中形成了不同的DOM結構,并且含有不同的樣式。

二、如何解決HTML5標簽不兼容

或許會有很多人在質疑:為什么老式的瀏覽器不能識別這些標簽?其實錯不在瀏覽器,因為在那個時代根本不存在這種標簽,所以不能正確識別出來,而這種不尋常 的標簽識別令DOM結構變得異常。對此,人們想出了很多在現階段頁面中使用HTML5元素的解決方案。每一個解決方案為了做到兼容都會遇到一些特定的問題。跟大家分享一下:

1、實現標簽被識別

我曾做個一個測試(以IE8為例),是一個文章標題和藍色字的文章內容,其中文章內容用了article標簽。代碼如下:

文章標題

這是文章內容,應該是一段藍色的文字。在老式瀏覽器中,如果不做hack將顯示異常。

在IE8瀏覽器中,顯示如下:IE8不能識別article標簽, 定義在標簽上的CSS樣式沒有起作用。 在IE8中,被解釋成命名為和

兩個空的標簽元素,與文章內容并列為兄弟節點,如下圖所示:

既然因為不能識別標簽而不能使用,那我的解決辦法就是讓標簽被識別出來。所幸,簡單地通過 document.createElement(tagName)即可以讓瀏覽器識別標簽和CSS引擎知道該標簽的存在。假設我們上面的例子 的

區域加上如下代碼:

IE8瀏覽器中的DOM解釋就會變成下圖所示:自然,文字也顯示成正常的藍色。如下圖所示:

2、JavaScript解決方案

JavaScript解決方案目的是解決在舊版本的IE中樣式應用的問題。老版本的IE不會識別不明元素已經是一個耳熟能詳的特性,而如果這些元素已經通 過document.createElement創建,那么瀏覽器就可以識別這些標簽,并可以將其在DOM樹中構建,然后允許開發者對其應用樣式。

這個方法可以確保HTML5標簽能在舊版本IE中對應創建DOM節點,然后可以對其應用樣式。這個方法將HTML5塊級元素設置成display:block,從而可以在各個瀏覽器中做到兼容。

今天測試把網頁改成了HTML5的,調試了一下,在FF和Opera中都顯示正常了,到了IE6上卻變得面目全非了。對此我還特意去找了一些使用JS代碼支持HTML5標簽元素的方法,在此也跟大家分享一下:

(1)使用html5shiv

查看了一下,發現了html5shiv能解決這個問題,可以把HTML5的新元素轉換成IE6認識的內容。只需要在你的head中調用這段代碼就行:

當然你也可以直接把這個文件下載到自己的網站上。但這個文件必須在head標簽中調用,因為IE必須在元素解析這前知道這些元素,才能啟作用!

但還要提醒你一下:

還要在你的CSS文件中加上以下代碼,不然有可能會出現些莫名其妙的問題。

header,nav,article,section,aside,footer{display:block;}

另外excanvas.js是Google為IE6支持canvas元素寫的腳本,以后我會跟大家再細說這樣的例子,感興趣的朋友可以去試試。

(2)使用Kill IE6

除此之外你還可以使用KILL IE6一族,前提是你的瀏覽器允許執行JS文件。方法很簡單,在你的網站的之前加上以下代碼就可以了:

上面寫的前綴html5是純粹是用于這個例子而且也不是官方支持的,你甚至可以用"foo"作為前綴,結果還是一樣。有了前綴之后,IE會識別新的元素,從而可以應用樣式。在其他瀏覽器中一樣有效,那么最后,你就成功地在各個瀏覽器中構建了一樣的元素和一樣的樣式。

這個方法的缺陷很明顯:你必須在HTML文檔中使用XML格式的命名空間,同樣,你也需要在css中這么做:

html5:section {

display: block;

}

點評:這并不是我期望Web開發者編寫代碼的方式。雖然這是一個非常杰出的解決方案,但是這讓應用變得不自然。我不希望看到文件中充滿了帶命名空間的元素。

4、Bulletproof技術(防彈衣技術)

說實話,我是第一次接觸到這個技術,建議在所有新的HTML5塊級元素中增加一個內部的div元素,然后包含一個CSS class,用這個元素來替代HTML元素(類似在里面穿了一件防彈衣),例如:

在應用樣式的時候,Tantek推薦直接給div增加樣式,而不是給新元素增加樣式

推薦使用:

.section {

color: blue;

}

而不是:

section {

color: blue;

}

這個方案的原理是用簡單的方式將原來的樣式應用方式轉移到一個代表了HTML5標簽的元素上。由于我一般情況下不會將樣式通過標簽名的方式應用到元素上,所以也并不完全支持這個建議。

這個方案的缺陷是不同的瀏覽器構建了不同的DOM結構,那么你必須在編寫JavaScript和CSS的時候格外小心。獲取子節點或者父節點的時候,不同的瀏覽器返回的結果可能會不一樣。特別是在下面的代碼中:

5、反向的bulletproof技術

還有一些方法,比如嘗試使用和Tanteck方案相反的技術,也就是把HTML5元素放在div元素內部,例如:這個方案唯一的不同是HTML5元素的位置,其他都一樣。喜歡這個技術的支持者認為他的一致性很好(適用于所有的元素,包括)。但是DOM結構的不同讓這個方案意義變得不大。他的主要優勢是技術上的一致性。

6、關于X-UA-Compatible的使用

目前絕大多數網站都用以下代碼來作為IE8的兼容方法。

雖然微軟將IE向標準邁進了一大步,而事實上IE8還存在一系列渲染的奇怪現象是不爭的事實。

在X-UA-Compatible中可用的方法有:

其中最后一行是永遠以最新的IE版本模式來顯示網頁的。

另外加上

而使用,Emulate模式后則更重視。所以目前來說還是以使用

為首選。

7、通過修改HTML部分來實現

我的主要目標是確保我只需要修改HTML部分。這就意味著不需要修改CSS和JavaScript。為什么會有這樣的需求?需要修改的Web應用視圖越 多,你越有可能制造bug。將改變限制到一個視圖也就限制了bug的出現,即使出現了bug,也可以減少你查找錯誤的范圍。如果一個視圖破相了,我可以知 道這是因為我增加了一個section元素,而不是考慮是不是CSS文件修改來帶的影響。

在研究了所有這些解決方案,并進行一些嘗試和設計之后,我回到了Tantek的方案。這是唯一一個只需要修改HTML而不用動CSS和HTML的方案。現在,我在他的方案基礎上做了一些改進,來達到我想要的結果。

首先,我不會給那些代表HTML5元素的class增加樣式(所以我不會使用.section這樣的選擇器)。我保留了div元素,然后再增加一個帶語義的class來應用樣式,并作為進行JavaScript操作的鉤子。

例如,這樣的代碼:

經過改進后:

這樣的修改完成后,我依然使用.content作為樣式和腳本的入口。這也意味著我不需要修改CSS和JavaScript。

然后,為了避免hgroup標簽這樣的情況,我選擇不使用這個標簽。我在我已有的所有頁面中沒有找到任何一個使用了這個標簽的。由于hgroup標簽只能 包含標題元素,如果你確實想要使用這個標簽,那么使用hrgoup來包含本身是非常安全的(假設它沒有包含其他的塊級元素)。

我在花了很多時間來測試比較bulletproof和反向的bulletproof哪個更好一些。我做選擇時最主要的決定因素就是反向的 bulletproof需要我去增加CSS代碼。在那些為HTML5標簽創建了DOM節點但是沒有應用默認樣式的元素來說,div元素里包含了一個 HTML5塊級元素在很多情況下都會攪亂我的布局,因為創建的DOM節點是行內元素。我不得不明確增加CSS規則來讓這個節點變成塊級元素從而可以正常布局,這也就違反了我不修改CSS文件的初衷。

三、點評:

在我的研究中,我使用了多個頁面,然后在這些頁面上使用修改過后的bulletproof技術。我分別在簡單和復雜的布局中,含有和不含有 JavaScript交互進行測試。在每一個例子中,我只需要修改HTML就可以讓頁面表現正確(不修改JavaScript和CSS)。那么,子節點和 父節點的問題怎么辦?有趣的事情是我在測試中并沒有遇到這樣的問題。

理由很簡單,因為我對代碼苛刻的態度。我認真地做了第二遍檢查:

(1)標簽名和ID不會用于應用樣式(只是用class)。

(2)盡量選擇常用的CSS選擇器并且盡量減少選擇器的使用。

(3)JavaScript代碼不依賴于特定的DOM結構。

(4)標簽名不用于操作DOM。

一個有趣的事情是使用了HTML5元素作為容器。而這些新的元素僅僅是作為功能性模塊的邊界。你應該花費你的大部分時間為內部的元素編寫樣式 和腳本而不是處理各個模塊間的樣式和腳本。由于JavaScript和CSS標簽都應用在容器的內部,所以一切都顯得很順利。我想這才是一個真正的代碼質量高的網站。

信息來源尚品中國:北京網站建設

來源聲明:

本文章系尚品中國編輯原創或采編整理,如需轉載請注明來自尚品中國。以上內容部分(包含圖片、文字)來源于網絡,如有侵權,請及時與本站聯系(010-60259772)。

立即預約專屬顧問 開啟數字化轉型之旅!

10年+資深項目經理1V1服務 | 行業定制化方案 | 精準報價體系
獲取策劃方案
立即預約專屬顧問 開啟數字化轉型之旅!

咨詢我們,獲得專業的服務和報價

聯系我們,免費獲取項目方案及報價,或只是聊一聊您的項目? 在收到您的需求留言后我們將由專業人員于24小時內與您取得聯系,請您保持電話暢通!

  • 科研院所解決方案
  • 外貿出海解決方案
  • 協會學會解決方案
  • 集團上市公司解決方案
  • 生物醫藥解決方案
  • 制造業解決方案
  • 高校教育解決方案
  • 信創網站改造解決方案
更多服務咨詢,請聯系尚品

010-60259772

您的姓名 *
您的電話 *
您的郵箱
公司名稱 *
主站蜘蛛池模板: 国产一区二区三区在线观看 | 国产大屁股喷水视频在线观看 | 成人免费视频观看 | 国产99精品 | 欧美videosex性极品hd | 日出水了视频大全 | 少妇高清精品毛片在线视频 | 国产精品制服 | 精产一二三产区m553 | 国产真实乱子伦清晰对白 | 日韩在线免费 | 少妇一晚三次一区二区三区 | 国产亚洲精品久久精品录音 | 少妇伦子伦精品无码styles | 99久久免费国产精品 | 少妇高清精品毛片在线视频 | 亚欧成人中文字幕一区 | 天天色天天操天天射 | 97av视频在线播放 | 日韩一区二区不卡 | 一个人看aaaa免费中文 | 国内精品一区二区三区 | 无码丰满熟妇juliaann与黑人 | 久久免费看少妇高潮A片JA | 嫩草影院免费 | 不卡一区 | 2019偷偷狠狠的日日 | 成人免费在线视频 | 国产毛片精品 | 久久午夜影视 | 久久色亚洲| 欧美老熟妇又粗又大 | 一区二区三区在线免费观看 | 一区二区三区不卡免费视频97 | 日本伊人色综合网站 | 伦理午夜电影免费观看 | 久久国产精品一国产精品金尊 | 久色激情| 久久精品无码一区二区无码 | 99人体做爰视频 | 奇米影视色777四色在线首页 | 色香婷婷 | 蜜桃视频插满18在线观看 | 日本久久久久久久做爰片日本 | 国产精品偷拍 | 亚洲最大成人综合网720p | 成人精品免费视频 | 狂野欧美性猛交免费视频 | 99免费观看视频 | 国产sm重味一区二区三区 | 婷婷在线视频 | 97久久综合亚洲色hezyo | 国产猛烈高潮尖叫视频免费 | 国产精品香港三级国产av | 特黄特色大片免费播放器图片 | 两性视频久久 | 免费国精产品自偷自偷免费看 | 又爽又黄又无遮挡的激情视频免费 | 日韩精品真人荷官无码 | 亚洲福利网 | 久久视屏这里只有精品6国产 | 亚洲精品乱码久久久久久蜜桃91 | 成人区人妻精品一熟女 | 欧美丰满老妇性猛交 | 国亚洲欧美日韩精品 | 摸丰满大乳奶水www免费 | 欧美 中文字幕 | 精品三级在线 | 国产做a | 国产精品无码无卡无需播放器 | 99视频有精品视频免费观看 | 国产二区三区视频 | 成人无码T髙潮喷水A片小说 | 一本精品中文字幕在线 | 日本高清免费网站 | 亚洲一区在线观看视频 | 5d肉蒲团之性战奶水 | 国产精品视频免费一区二区三区 | 国产熟妇高潮叫床视频播放 | 亚洲aⅴ男人的天堂在线观看 | 久久综合色之久久综合 | 午夜院线 | 99超级碰碰成人香蕉网 | 欧洲亚洲精品久久久久 | 国产成人在线观看免费网站 | 九一免费版在线观看 | 欧美特级限制片高清 | 久久九九国产精品怡红院 | 欧美大片在线看免费观看 | 国产不卡在线蜜 | 久爱青草视频在线观看 | 亚洲视频在线看 | 中国女人做爰视频 | 黑人糟蹋人妻hd中文字幕 | 亚洲国产日韩a在线亚洲 | 国产色婷婷视频在线观看 | 少妇特殊按摩高潮惨叫无码 | 一级特黄欧美日韩免费视频 | 性猛交ⅹxxx富婆视频 |