首页 > 关于script标签type属性的一些用法求解

关于script标签type属性的一些用法求解

今天看了一下reactjs的内容,里面有一点提到:

需要注意如果使用 JSX, 那么 script 标签的 type 应该更改为 text/jsx

我的疑问在于,自定义的type类型是怎么去解析和执行的?
之前看过less的客户端用法,里面也类似地提到:

<link rel="stylesheet/less" type="text/css" href="styles.less" />

这里的rel值一样是自定义的,我想明白这中间的原理是怎么样的?
十分好奇,求大神细答。


定义浏览器对待资源文件的方式, 也就是 MIME类型
如果是浏览器能够处理的 浏览器会直接处理
不能处理的就是各种 自己写的javascript来处理这些标签的内容

参考: https://tools.ietf.org/html/rfc2045
https://tools.ietf.org/html/rfc2318


type 属性规定的是脚本的 MIME 类型。这里声明的 type="text/jsx",并不是通常的直接解析执行的脚本,JSXTransformer.js 会对其进行预编译后再执行。

link的rel属性规定当前文档与被链接文档之间的关系。 stylesheet即表示文档的外部样式表。
stylesheet/less即引入.less样式表。
之后插入的<script src="less.js" type="text/javascript"></script>
这个JS文件能够把LESS文件在浏览器端编译成CSS文件,然后在呈现到页面上。


我来详细讲解下吧。

react:
如果内容写在html的script标签内了,就直接innerHTML内,就拿到了字符串了。然后进行编译执行。
但是如果是<script src="xxx.js" type="text/babel"> 这样的情况。需要load数据回来。
script标签会去加载一次浏览器无法识别的基于react语法的内容。
因为type不是javascript,所以并不会执行这段代码。
但是做预编译功能的js代码是无法获取这个script的内容的。这个就是典型的script标签实现jsonp的时候,要带入一个callback函数嵌套在数据外面的原因。
所以react的浏览器预编译器js代码会去取这个script标签dom的src的值,执行一次XHR请求。来获取内容。
结果就是实际上会加载两次。
如下图加载了两次,index.js。

Less:
一样的原理。
唯一不同的是,link标签如果是这样
<link rel="stylesheet/less" type="text/css" href="./styles.less">
浏览器压根就直接忽略这段内容。不会去主动请求这段数据。
而是由less.js这个预编译的js代码进行xhr请求。
所以只会加载一次。

【热门文章】
【热门文章】