温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

HTML5中怎么导入文件

发布时间:2022-03-02 14:00:50 来源:亿速云 阅读:356 作者:iii 栏目:web开发

本篇内容主要讲解“HTML5中怎么导入文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5中怎么导入文件”吧!

Template,Shadow DOM和Custom Elements让您创建UI组件比以前更容易了。但是像HTML,CSS,JavaScript这样的资源仍然需要一个个地去加载,这是很没效率的。

例如,现在加载jQuery UI或Bootstrap就需要为JavaScript,CSS及Web字体添加单独的标签。如果您的Web组件应用了多重的依赖,那事情就变得更加复杂。

HTML导入让您以一个合并的HTML文件来加载这些资源。使用HTML导入

为加载一个HTML文件,您需要增加一个链接标签,其相关属性为import,herf属性是HTML文件的路径。例如,如果您想把component.html加载到index.html:

index.html

XML / HTML代码将内容复制到文本

< link rel = “ import” href = “ component.html” >       

您可以往HTML导入文件(译者注:此处将“导入的HTML”译为“ HTML导入文件”,将“原始HTML”译为“ HTML主文件”。例如,index.html是HTML主文件, component.html是HTML导入文件。)添加任何的资源,包括脚本,样式表和字体,就跟往普通的HTML添加资源一样。

component.html

XML / HTML代码将内容复制到文本

< link rel = “ stylesheet” href = “ css / style.css” >    

<脚本src = “ js / script.js” > </脚本>   

doctype,html,head,body这些标签是不需要的。HTML导入会立即加载要引入的文档,解析文档中的资源,如果有脚本的话也会立即执行它们。执行顺序

浏览器解析HTML文档的方式是线性的,这就是说HTML顶部的脚本会比底部先执行。并且,浏览器通常会等到JavaScript代码执行完毕后,才会接着解析后面的代码。

为了不让脚本压缩HTML的渲染,你可以在标签中添加async或Defer属性(或者你也可以将脚本标签放到页面的底部)。defer属性会重复脚本的执行,直到全部页面解析完成。async属性让浏览器初始化地执行脚本,从而不会阻止HTML的渲染。那么,HTML导入是怎样工作的呢?

HTML导入文件中的脚本就跟着包含defer属性一样。例如在下面的示例中,index.html会先执行script1.js和script2.js,然后再执行script3.js。

index.html

XML / HTML代码将内容复制到文本

< link rel = “ import” href = “ component.html” >  // 1。     

< title >导入示例</ title >  

< script src = “ script3.js” > </ script >         // 4。   

component.html

XML / HTML代码将内容复制到文本

< 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”]添加异步属性,HTML导入会把它当做包含异步属性的脚本来对待。它不会等待HTML导入文件的执行和加载,这意味着HTML导入不会阻止HTML主文件的渲染。这也给提升网站性能带来了可能,除非有其他的脚本依赖于HTML引入文件的执行。跨域引入

从根本上说,HTML引入是不能从其他的域名引入资源的。

例如,您不能从http://webcomponents.org/向http://example.com/导入HTML文件。为了绕过这个限制,可以使用CORS(跨域资源共享)。想了解CORS,请看这篇文章。HTML导入文件中的窗口和文档对象

前面我提过在引入HTML文件的时候里面的脚本是会被执行的,但这并不意味着HTML引入文件中的标签也会被浏览器渲染。你需要写一些JavaScript代码来帮忙。

当在HTML导入文件中使用JavaScript时,有一点要提防的是,HTML导入文件中的文档对象实际上指的是HTML主文件中的文档对象。以前面的代码为例,index.html和组件。 html的文档都是指index.html的文档对象。怎么才能使用HTML导入文件中的文档呢?可以链接中的导入属性。

index.html

XML / HTML代码将内容复制到文本

var  link  =  document .querySelector('link [ rel = “ import” ]');   

link.addEventListener('load',function(e){   

  var  importedDoc  = 链接.import;   

  // importedDoc指向component.html下的文档   

});  

为了获取component.html中的文档对象,要使用document.currentScript.ownerDocument。

component.html

XML / HTML代码将内容复制到文本

var  mainDoc  =  document .currentScript.ownerDocument;   

// mainDoc指向component.html下的文档  

如果您在用webcomponents.js,那么就用document._currentScript来代替document.currentScript。下划线用于填充currentScript属性,因为不是所有的浏览器都支持这个属性。

component.html

XML / HTML代码将内容复制到文本

var  mainDoc  =  document ._currentScript.ownerDocument;   

// mainDoc指向component.html下的文档   

通过在脚本开头添加下面的代码,您就可以轻松地访问component.html中的文档对象,而不用管浏览器是不是支持HTML导入。document._currentScript = document._currentScript || document.currentScript;性能方面的考虑

使用HTML引入的一个好处是能够将资源组织起来,但是也意味着在加载这些资源的时候,由于使用了一些额外的HTML文件而让它们变得过大。有几点是需要考虑的:解析依赖

例如,您要从导入文件中加载jQuery,如果每个引入文件都包含加载jQuery的script标签,则如果HTML主文件要依赖多个导入文件,而且引入文件中包含相同的库,这时会怎样呢?那么jQuery就会被加载两次,并且也会被执行两次。

index.html

XML / HTML代码将内容复制到文本

< link rel = “ import” href = “ component1.html” >    

< link rel = “ import” href = “ component2.html” >    

component1.html

XML / HTML代码将内容复制到文本

<脚本src = “ js / jquery.js” > </脚本>   

component2.html HTML引入自动帮你解决了这个问题。

以前面的代码为例,通过将加载jQuery脚本标签的做法不同,HTML引入对已经加载过的HTML文件进行进行,并通过加载jQuery的脚本标签打包成一个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引入结合起来

你之前可能没有看过这些文章,我先解释一下:Template可以让你用声明的方式定义你的自定义元素的内容。ShadowDOM可以让一个元素的样式,ID,类只作用到其本身。自定义元素可以让你自定义HTML标签。通过把这些跟HTML引入结合起来,你自定义的网络组件会变为替代,具有重叠性。任何人添加一个Link标签就可以使用它。

x-component.html

XML / HTML代码将内容复制到文本

< template id = “ template” >   

  <样式>  

    ...   

  </ style >  

  < div id = “容器” >   

    < img src = “ http://webcomponents.org/img/logo.svg” >   

    < content select = “ h2” > </ content >   

  </ div >  

</模板>  

<脚本>  

  //此元素将被注册到index.html   

  //因为`document`在这里是index.html中的那个   

  var  XComponent  =  document .registerElement('x-component',{   

    原型:Object.create(HTMLElement.prototype,{   

      createdCallback:{   

        值:function(){   

          var  root  =  this .createShadowRoot();   

          var  template  =  document .querySelector('#template');   

          var  clone  =  document .importNode(template.content,true);   

          root.appendChild(clone);   

        }   

      }   

    })   

  });   

</脚本>  

index.html

XML / HTML代码将内容复制到文本

...   

  < link rel = “ import” href = “ x-component.html” >    

</头>  

<身体>  

  < x分量>  

    < h2 >这是自定义元素</ h2 >  

  </ x-component >  

  ...  

注意,因为X-component.html中的文档对象跟的index.html的一样,你没必要再写一些棘手的代码,它会自动为你注册。支持的浏览器

Chrome和Opera提供对HTML导入的支持,Firefox要在2014年12月后才支持(Mozilla表示Firefox不计划在最初提供对HTML导入的支持,并需要首先了解ES6的模块是如何实现的)。

您可以去chromestatus.com或caniuse.com查询浏览器是否支持HTML导入。想要在其他浏览器上使用HTML导入,可以使用webcomponents.js(原名platform.js)。

到此,相信大家对“HTML5中怎么导入文件”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI