好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識(shí)庫 > 簡(jiǎn)單介紹HTML5中的文件導(dǎo)入

簡(jiǎn)單介紹HTML5中的文件導(dǎo)入

熱門標(biāo)簽:阜陽企業(yè)外呼系統(tǒng) 南通數(shù)據(jù)外呼系統(tǒng)推廣 外呼系統(tǒng)電話怎么投訴 申請(qǐng)400電話流程簡(jiǎn)介 呼和浩特外呼電銷系統(tǒng)排名 地圖標(biāo)注位置能賺錢嗎 外呼線穩(wěn)定線路 pageadm實(shí)現(xiàn)地圖標(biāo)注 邢臺(tái)縣地圖標(biāo)注app

Template、Shadow DOM及Custom Elements 讓你創(chuàng)建UI組件比以前更容易了。但是像HTML、CSS、JavaScript這樣的資源仍然需要一個(gè)個(gè)地去加載,這是很沒效率的。

刪除重復(fù)依賴也并不簡(jiǎn)單。例如,現(xiàn)在加載jQuery UI或Bootstrap就需要為JavaScript、CSS及Web Fonts添加單獨(dú)的標(biāo)簽。如果你的Web 組件應(yīng)用了多重的依賴,那事情就變得更為復(fù)雜。

HTML 導(dǎo)入讓你以一個(gè)合并的HTML文件來加載這些資源。
使用HTML導(dǎo)入

為加載一個(gè)HTML文件,你需要增加一個(gè)link標(biāo)簽,其rel屬性為import,herf屬性是HTML文件的路徑。例如,如果你想把component.html加載到index.html:

index.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <link rel="import" href="component.html" >    

你可以往HTML導(dǎo)入文件(譯者注:本文將“ the imported HTML”譯為“HTML導(dǎo)入文件”,將“the original HTML”譯為“HTML主文件”。例如,index.html是HTML主文件,component.html是HTML導(dǎo)入文件。)添加任何的資源,包括腳本、樣式表及字體,就跟往普通的HTML添加資源一樣。

component.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <link rel="stylesheet" href="css/style.css">  
  2. <script src="js/script.js"></script>  

doctype、html、 head、 body這些標(biāo)簽是不需要的。HTML 導(dǎo)入會(huì)立即加載要導(dǎo)入的文檔,解析文檔中的資源,如果有腳本的話也會(huì)立即執(zhí)行它們。
執(zhí)行順序

瀏覽器解析HTML文檔的方式是線性的,這就是說HTML頂部的script會(huì)比底部先執(zhí)行。并且,瀏覽器通常會(huì)等到JavaScript代碼執(zhí)行完畢后,才會(huì)接著解析后面的代碼。

為了不讓script 妨礙HTML的渲染,你可以在標(biāo)簽中添加async或defer屬性(或者你也可以將script 標(biāo)簽放到頁面的底部)。defer 屬性會(huì)延遲腳本的執(zhí)行,直到全部頁面解析完畢。async 屬性讓瀏覽器異步地執(zhí)行腳本,從而不會(huì)妨礙HTML的渲染。那么,HTML 導(dǎo)入是怎樣工作的呢?

HTML導(dǎo)入文件中的腳本就跟含有defer屬性一樣。例如在下面的示例中,index.html會(huì)先執(zhí)行script1.js和script2.js ,然后再執(zhí)行script3.js。

index.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <link rel="import" href="component.html"> // 1.   
  2. <title>Import Example</title>  
  3. <script src="script3.js"></script>        // 4.  

component.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <script src="js/script1.js"></script>     // 2.   
  2. <script src="js/script2.js"></script>     // 3.  

1.在index.html 中加載component.html并等待執(zhí)行

2.執(zhí)行component.html中的script1.js

3.執(zhí)行完script1.js后執(zhí)行component.html中的script2.js

4.執(zhí)行完 script2.js繼而執(zhí)行index.html中的script3.js

注意,如果給link[rel="import"]添加async屬性,HTML導(dǎo)入會(huì)把它當(dāng)做含有async屬性的腳本來對(duì)待。它不會(huì)等待HTML導(dǎo)入文件的執(zhí)行和加載,這意味著HTML 導(dǎo)入不會(huì)妨礙HTML主文件的渲染。這也給提升網(wǎng)站性能帶來了可能,除非有其他的腳本依賴于HTML導(dǎo)入文件的執(zhí)行。
跨域?qū)?/p>

從根本上說,HTML導(dǎo)入是不能從其他的域名導(dǎo)入資源的。

比如,你不能從http://webcomponents.org/向 http://example.com/ 導(dǎo)入HTML 文件。為了繞過這個(gè)限制,可以使用CORS(跨域資源共享)。想了解CORS,請(qǐng)看這篇文章。
HTML導(dǎo)入文件中的window和document對(duì)象

前面我提過在導(dǎo)入HTML文件的時(shí)候里面的腳本是會(huì)被執(zhí)行的,但這并不意味著HTML導(dǎo)入文件中的標(biāo)簽也會(huì)被瀏覽器渲染。你需要寫一些JavaScript代碼來幫忙。

當(dāng)在HTML導(dǎo)入文件中使用JavaScript時(shí),有一點(diǎn)要提防的是,HTML導(dǎo)入文件中的document對(duì)象實(shí)際上指的是HTML主文件中的document對(duì)象。以前面的代碼為例,index.html和  component.html 的document都是指index.html的document對(duì)象。怎么才能使用HTML導(dǎo)入文件中的document 呢?借助link中的import 屬性。

index.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. var link = document.querySelector('link[rel="import"]');   
  2. link.addEventListener('load', function(e) {   
  3.   var importedDoc = link.import;   
  4.   // importedDoc points to the document under component.html   
  5. });  

為了獲取component.html中的document 對(duì)象,要使用document.currentScript.ownerDocument.

component.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. var mainDoc = document.currentScript.ownerDocument;   
  2. // mainDoc points to the document under component.html  

如果你在用webcomponents.js,那么就用document._currentScript來代替document.currentScript。下劃線用于填充currentScript屬性,因?yàn)椴⒉皇撬械臑g覽器都支持這個(gè)屬性。

component.html

 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. var mainDoc = document._currentScript.ownerDocument;   
  2. // mainDoc points to the document under component.html   

通過在腳本開頭添加下面的代碼,你就可以輕松地訪問component.html中的document對(duì)象,而不用管瀏覽器是不是支持HTML導(dǎo)入。

document._currentScript = document._currentScript || document.currentScript;
性能方面的考慮

使用HTML 導(dǎo)入的一個(gè)好處是能夠?qū)①Y源組織起來,但是也意味著在加載這些資源的時(shí)候,由于使用了一些額外的HTML文件而讓頭部變得過大。有幾點(diǎn)是需要考慮的:
解析依賴

假如HTML主文件要依賴多個(gè)導(dǎo)入文件,而且導(dǎo)入文件中含有相同的庫,這時(shí)會(huì)怎樣呢?例如,你要從導(dǎo)入文件中加載jQuery,如果每個(gè)導(dǎo)入文件都含有加載jQuery的script標(biāo)簽,那么jQuery就會(huì)被加載兩次,并且也會(huì)被執(zhí)行兩次。

index.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <link rel="import" href="component1.html">  
  2. <link rel="import" href="component2.html">  

component1.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <script src="js/jquery.js"></script>  

component2.html
 
HTML導(dǎo)入自動(dòng)幫你解決了這個(gè)問題。

與加載兩次script標(biāo)簽的做法不同,HTML 導(dǎo)入對(duì)已經(jīng)加載過的HTML文件不再進(jìn)行加載和執(zhí)行。以前面的代碼為例,通過將加載jQuery的script標(biāo)簽打包成一個(gè)HTML導(dǎo)入文件,這樣jQuery就只被加載和執(zhí)行一次了。

但這還有一個(gè)問題:我們?cè)黾恿艘粋€(gè)要加載的文件。怎么處理數(shù)目膨脹的文件呢?幸運(yùn)的是,我們有一個(gè)叫vulcanize的工具來解決這個(gè)問題。
合并網(wǎng)絡(luò)請(qǐng)求

Vulcanize 能將多個(gè)HTML文件合并成一個(gè)文件,從而減少了網(wǎng)絡(luò)連接數(shù)。你可以借助npm安裝它,并且用命令行來使用它。你可能也在用 grunt和gulp 托管一些任務(wù),這樣的話你可以把vulcanize作為構(gòu)建過程的一部分。

為了解析依賴以及合并index.html中的導(dǎo)入文件,使用如下命令:


復(fù)制代碼
代碼如下:
$ vulcanize -o vulcanized.html index.html

通過執(zhí)行這個(gè)命令,index.html中的依賴會(huì)被解析,并且會(huì)產(chǎn)生一個(gè)合并的HTML文件,稱作 vulcanized.html。學(xué)習(xí)更多有關(guān)vulcanize的知識(shí),請(qǐng)看這兒。

注意:http2的服務(wù)器推送功能被考慮用于以后消除文件的連結(jié)與合并。
把Template、Shadow DOM、自定義元素跟HTML導(dǎo)入結(jié)合起來

讓我們對(duì)這個(gè)文章系列的代碼使用HTML導(dǎo)入。你之前可能沒有看過這些文章,我先解釋一下:Template可以讓你用聲明的方式定義你的自定義元素的內(nèi)容。Shadow DOM可以讓一個(gè)元素的style、ID、class只作用到其本身。自定義元素可以讓你自定義HTML標(biāo)簽。通過把這些跟HTML導(dǎo)入結(jié)合起來,你自定義的web 組件會(huì)變得模塊化,具有復(fù)用性。任何人添加一個(gè)Link標(biāo)簽就可以使用它。

x-component.html

 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. <template id="template">  
  2.   <style>  
  3.     ...   
  4.   </style>  
  5.   <div id="container">  
  6.     <img src="http://webcomponents.org/img/logo.svg">  
  7.     <content select="h1"></content>  
  8.   </div>  
  9. </template>  
  10. <script>  
  11.   // This element will be registered to index.html   
  12.   // Because `document` here means the one in index.html   
  13.   var XComponent = document.registerElement('x-component', {   
  14.     prototype: Object.create(HTMLElement.prototype, {   
  15.       createdCallback: {   
  16.         value: function() {   
  17.           var root = this.createShadowRoot();   
  18.           var template = document.querySelector('#template');   
  19.           var clone = document.importNode(template.content, true);   
  20.           root.appendChild(clone);   
  21.         }   
  22.       }   
  23.     })   
  24.   });   
  25. </script>  

index.html
 

XML/HTML Code復(fù)制內(nèi)容到剪貼板
  1. ...   
  2.   <link rel="import" href="x-component.html">  
  3. </head>  
  4. <body>  
  5.   <x-component>  
  6.     <h1>This is Custom Element</h1>  
  7.   </x-component>  
  8.   ...  

注意,因?yàn)閤-component.html 中的document 對(duì)象跟index.html的一樣,你沒必要再寫一些棘手的代碼,它會(huì)自動(dòng)為你注冊(cè)。
支持的瀏覽器

Chrome 和 Opera提供對(duì)HTML導(dǎo)入的支持,F(xiàn)irefox要在2014年12月后才支持(Mozilla表示Firefox不計(jì)劃在近期提供對(duì)HTML導(dǎo)入的支持,聲稱需要首先了解ES6的模塊是怎樣實(shí)現(xiàn)的)。

你可以去chromestatus.com或caniuse.com查詢?yōu)g覽器是否支持HTML導(dǎo)入。想要在其他瀏覽器上使用HTML導(dǎo)入,可以用webcomponents.js(原名platform.js)。
相關(guān)資源

HTML導(dǎo)入就介紹這么多了。如果你想學(xué)更多關(guān)于HTML導(dǎo)入的知識(shí),請(qǐng)前往:

    HTML Imports: #include for the web – HTML5Rocks
    HTML Imports spec

 

標(biāo)簽:辛集 楊凌 蚌埠 撫順 黃山 德州 鶴崗 內(nèi)蒙古

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《簡(jiǎn)單介紹HTML5中的文件導(dǎo)入》,本文關(guān)鍵詞  簡(jiǎn)單,介紹,HTML5,中的,文件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《簡(jiǎn)單介紹HTML5中的文件導(dǎo)入》相關(guān)的同類信息!
  • 本頁收集關(guān)于簡(jiǎn)單介紹HTML5中的文件導(dǎo)入的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 嗯太深了| 娇生惯养4pH最简单处理| 人妻夜夜爽天天爽三区麻豆av| 性爽交免费视频| 免费免播放器在线视频观看| 香蕉在线播放| 亚洲国产精品无码久久久久高潮| 韩国R级合集HD无删减版| 青青热久久久久综合精品| gogo专业国模私拍大尺度| 男生女生搞黄色| 乱码一线二线三线| 粉嫩极品国产在线播放| a黄色大片| 国产毛片18片特黄是什么意思| 三级黄色片网址| 日本护士后进式猛烈动态图片| 色婷五月天| 在线免费不卡视频| 91啦丨九色丨蚪窝人妻| 欧美老肥bbwbbwbbw| 国产精品久久久久精品色欲 | 引狼入室的真实故事| 男男生子肉文| 内衣办公室里番| 亚洲精品午夜久久久久久久久 | ww在线观看免费完整版| 久久久亚洲一区二区三区无码夜秀| 欧美精品一区二区三区免费视频| 男人和女人上床视频| 国产精品亚洲AV三去一片红 | 日韩毛片网| 熟女肥婆一区二区三区视频| silklabo在线观看| 华丽的外出1| 重囗另类BBWSeⅹHD黑料| 公翁又粗又长又爽| 亚洲欧洲国产综合| 国产精品videos**| 97精产国品一二三产区| 中文字幕伊人久久网|