script标签在HTML中的作用有哪些?script标签中type属性的用途有
HTML Script标签的相关知识及作用:
关于script这个经常使用的标签,你理解多少,这个script标签随着改善,增添了一些html5的东西,比方async 和 defer,crossorigin,for / event等。
正如你大概知道的,script 标签是用来指定在网页上施行哪个 JavaScript 的。Script 标签可以直接包括 JavaScript 代码,或者指向一个 JavaScript 外链 URL。
Script 标签依照它们显现的次序被施行,下面的代码很直不雅地说明了这一点:
<script> var x = 3; </script> <script> alert(x); // Will alert '3'; </script>
使用外链资源时加载次序没有那么直不雅,但仍然是成立的:
<script src="//typekit.com/fj5j4j3.js"></script> <!-- 在Type套件已施行或超时此前,此第二足本不会施行。 --> <script src="//my.site/script.js"></script>
假如你混合使用外链和内联的 JavaScript,这个规则一样适用。
这意味着假如你的网站有很慢的足本在页面较前部分被加载,你的网页加载就会被显著拖慢。这也意味着后加载的足本可以依靠先加载的足本。
页面元素在它此前的所有足本都加载完毕此前是不会施行渲染的。这意味着你可以你可以在页面加载此前在网页上做各种疯狂的事情,当然前提是你不在意因此而造成的机能问题。
然而这个规则不适用于你在网页加载完成之后通过 document.appendChild 之类的办法增加 script 标签到 DOM 中。这些标签会按照阅读器恳求处置完成的前后施行足本,不再包管加载次序。
当一个 script 标签被施行,在它此前的 HTML 元素可以拜访(但是在它之后的还不克不及用)
<html> <head> <script> // document.head is available // document.body is not! </script> </head> <body> <script> // document.head is available // document.body is available </script> </body> </html>
你可以想象 HTML 解析器一个标签一个标签地拜访文档,当它解析到 script 标签时,立刻施行其中的 JavaScript。这意味着只要当开端标签显现在当前足本此前的 DOM 节点才可以在当前 JavaScript 中被拜访(通过 querySelectorALl,jQuery 等等)。
一个有用的推论是 document.head 在任何写在网页上的 JavaScript 几乎总是可用。document.body 只要当你将 script 标签写在 <body> 标签中或者它之后的时候才可用。
HTML5 增加了两个工具来操纵足本的施行。
async 表示“不消立刻施行它”。更详细地它表示:我不介意你在整个网页加载完成之后施行这个足本,把它放在其他足本施行之后。这关于统计剖析足原本说非常有用,由于页面上没有其他的代码需要依靠于统计足本施行。定义一个页面需要的变量或函数在 async 的代码中是不可的,由于你没有办法知道什么时候 async 代码将会被实际施行。
defer 表示“等候页面解析完成之后施行”。它大致等价于将你的足本绑定到DOMContentedLoaded 事件,或者使用 jQuery.ready。当这个代码被施行,DOM 中的一切元素都可用。不一样于 async,所有加了 defer 的足本将会依照它们显现在 HTML 页面中的次序施行,它只是延迟到 HTML 页面解析完毕后开端施行。
html中script标签中的type 属性的用途:
从历史上看(自 Netsacpe 2 产生起),在 script 标签上可否写上 type=text/javascript 没有什么关系。假如你通过 type 设定一个非 JavaScript 的 MIME 类型,阅读器不会施行它。当你想要定义你本人的说话时,这会很酷:
<script type="text/emerald"> make a social network but for cats </script>
这段代码实际施行结果由你本人决议,如:
<script> var codez = document.querySelectorAll('script[type="text/emerald"]'); for (var i=0; i < codez.length; i++) runEmeraldCode(codez[i].innerHTML); </script>
定义 runEmeraldCode 函数留给你们作为练习。
假如你有特殊的需要,你也可以重写页面上 script 标签的默许 type,办法是通过一个 meta 标签:
<meta http-equiv="Content-Script-Type" content="text/vbscript">
或者一个恳求返回一个 Content-Script-Type header。
可以用 crossorigin
虽然还没有完全被标准化,但是一些阅读器支撑 crossorigin 属性。根本的设法是,阅读器会限制对非同源资源的使用(同源资源是指雷同的和谈、hostname 乃至端口,例如: `http://google.com:80)。
这是为了防止你,例如,向你的竞争敌手网站发恳求,注销你的会员在对方网站的账号(这不好!)。这个问题牵扯到 script 标签虽然有点不测,但假如实现了 crossorigin,你只要加一个 handler 到window.onerror 事件上,就能在看操纵台上看到一些警告信息,提醒你引入了一个不该引入的外站足本。在平安的阅读器下,除非你指定 crossorigin 属性,不然加载外站足本不会出错。
crossorgin 不是一个奇妙的平安手段,它所做的只是让阅读器启用正常的 CORS 拜访检查,发起一个 OPTIONS 恳求并检查 Access-Control header。
html Script 标签和 innerHTML:
通过 DOM 动态增加到页面上的 script 标签会被阅读器施行:
var myScript = document.createElement('script'); myScript.textContent = 'alert("?")'; document.head.appendChild(myScript);
通过 innerHTML 动态增加到页面上的 script 标签则不会被施行:
document.head.innerHTML += '<script>alert("?")</script>';
为什么会是这样的缘由不是很肯定,但是它解决了一个小问题:“可否有一个方法让一个 script 标签在 Chrome 代码检查器中显示但不实际施行?”
【相关引荐】
HTML5中web是啥?web储备中的元素是什么?
HTML table属性你知道多少,进来理解一下?
以上就是script标签在HTML中的作用是啥?script标签中type属性的用途是啥?的具体内容,更多请关注百分百源码网其它相关文章!