本篇内容主要讲解“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中怎么导入文件”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。