<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      容易說明HTML5中的文件導入

      [摘要]這篇文章主要介紹了簡單介紹HTML中的文件導入,包括加載jQuery、導入后的執行順序等知識點,需要的朋友可以參考下Template、Shadow DOM及Custom Elements 讓你創建UI組件比以前更容易了。但是像HTML、CSS、JavaScript這樣的資源仍然需要一個個地去加載,...
      這篇文章主要介紹了簡單介紹HTML中的文件導入,包括加載jQuery、導入后的執行順序等知識點,需要的朋友可以參考下

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

      刪除重復依賴也并不簡單。例如,現在加載jQuery UI或Bootstrap就需要為JavaScript、CSS及Web Fonts添加單獨的標簽。如果你的Web 組件應用了多重的依賴,那事情就變得更為復雜。

      HTML 導入讓你以一個合并的HTML文件來加載這些資源。
      使用HTML導入

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

      index.html

      XML/HTML Code復制內容到剪貼板

      <link rel="import" href="component.html" >

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

      component.html

      XML/HTML Code復制內容到剪貼板

      <link rel="stylesheet" href="css/style.css">
      <script src="js/script.js"></script>

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

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

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

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

      index.html

      XML/HTML Code復制內容到剪貼板

      <link rel="import" href="component.html"> // 1.   
      <title>Import Example</title>
      <script src="script3.js"></script>        // 4.

      component.html

      XML/HTML Code復制內容到剪貼板

      <script src="js/script1.js"></script>     // 2.   
      <script src="js/script2.js"></script>     // 3.

      1.在index.html 中加載component.html并等待執行

      2.執行component.html中的script1.js

      3.執行完script1.js后執行component.html中的script2.js

      4.執行完 script2.js繼而執行index.html中的script3.js

      注意,如果給link[rel="import"]添加async屬性,HTML導入會把它當做含有async屬性的腳本來對待。它不會等待HTML導入文件的執行和加載,這意味著HTML 導入不會妨礙HTML主文件的渲染。這也給提升網站性能帶來了可能,除非有其他的腳本依賴于HTML導入文件的執行。
      跨域導入

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

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

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

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

      index.html

      XML/HTML Code復制內容到剪貼板

      var link = document.querySelector('link[rel="import"]');   
      link.addEventListener('load', function(e) {   
        var importedDoc = link.import;   
        // importedDoc points to the document under component.html   
      });

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

      component.html

      XML/HTML Code復制內容到剪貼板

      var mainDoc = document.currentScript.ownerDocument;   
      // mainDoc points to the document under component.html

      如果你在用webcomponents.js,那么就用document._currentScript來代替document.currentScript。下劃線用于填充currentScript屬性,因為并不是所有的瀏覽器都支持這個屬性。

      component.html

      XML/HTML Code復制內容到剪貼板

      var mainDoc = document._currentScript.ownerDocument;   
      // mainDoc points to the document under component.html

      通過在腳本開頭添加下面的代碼,你就可以輕松地訪問component.html中的document對象,而不用管瀏覽器是不是支持HTML導入。
      document._currentScript = document._currentScript document.currentScript;
      性能方面的考慮

      使用HTML 導入的一個好處是能夠將資源組織起來,但是也意味著在加載這些資源的時候,由于使用了一些額外的HTML文件而讓頭部變得過大。有幾點是需要考慮的:
      解析依賴

      假如HTML主文件要依賴多個導入文件,而且導入文件中含有相同的庫,這時會怎樣呢?例如,你要從導入文件中加載jQuery,如果每個導入文件都含有加載jQuery的script標簽,那么jQuery就會被加載兩次,并且也會被執行兩次。

      index.html

      XML/HTML Code復制內容到剪貼板

      <link rel="import" href="component1.html">
      <link rel="import" href="component2.html">

      component1.html

      XML/HTML Code復制內容到剪貼板

      <script src="js/jquery.js"></script>

      component2.html

      HTML導入自動幫你解決了這個問題。

      與加載兩次script標簽的做法不同,HTML 導入對已經加載過的HTML文件不再進行加載和執行。以前面的代碼為例,通過將加載jQuery的script標簽打包成一個HTML導入文件,這樣jQuery就只被加載和執行一次了。

      但這還有一個問題:我們增加了一個要加載的文件。怎么處理數目膨脹的文件呢?幸運的是,我們有一個叫vulcanize的工具來解決這個問題。
      合并網絡請求

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

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

      復制代碼

      代碼如下:

      $ vulcanize -o vulcanized.html index.html

      通過執行這個命令,index.html中的依賴會被解析,并且會產生一個合并的HTML文件,稱作 vulcanized.html。學習更多有關vulcanize的知識,請看這兒。

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

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

      x-component.html

      XML/HTML Code復制內容到剪貼板

      <template id="template">
        <style>
          ...   
        </style>
        <p id="container">
          <img src="http://webcomponents.org/img/logo.svg">
          <content select="h1"></content>
        </p>
      </template>
      <script>
        // This element will be registered to index.html   
        // Because `document` here means the one in index.html   
        var XComponent = document.registerElement('x-component', {   
          prototype: Object.create(HTMLElement.prototype, {   
            createdCallback: {   
              value: function() {   
                var root = this.createShadowRoot();   
                var template = document.querySelector('#template');   
                var clone = document.importNode(template.content, true);   
                root.appendChild(clone);   
              }   
            }   
          })   
        });   
      </script>

      index.html

      XML/HTML Code復制內容到剪貼板

      ...   
        <link rel="import" href="x-component.html">
      </head>
      <body>
        <x-component>
          <h1>This is Custom Element</h1>
        </x-component>
        ...

      注意,因為x-component.html 中的document 對象跟index.html的一樣,你沒必要再寫一些棘手的代碼,它會自動為你注冊。
      支持的瀏覽器

      Chrome 和 Opera提供對HTML導入的支持,Firefox要在2014年12月后才支持(Mozilla表示Firefox不計劃在近期提供對HTML導入的支持,聲稱需要首先了解ES6的模塊是怎樣實現的)。

      你可以去chromestatus.com或caniuse.com查詢瀏覽器是否支持HTML導入。想要在其他瀏覽器上使用HTML導入,可以用webcomponents.js(原名platform.js)。

      相關推薦:

      HTML5中form表單標簽用法詳解

      以上就是簡單介紹HTML5中的文件導入的詳細內容,更多請關注php中文網其它相關文章!


      網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。




      日韩精品一区二区三区高清