認識script標籤
阿新 • • 發佈:2021-01-06
認識script標籤
將 JavaScript 插入 HTML 的主要方法就是使用 script 元素
1、常用屬性
- async 非同步載入指令碼,只對外部檔案有效
- defer 頁面載入完成後再執行指令碼,只對外部檔案有效
- integrity 對接指令碼資源和制定的加密簽名驗證
- src 執行程式碼外部檔案
- type 值為"module"時,程式碼會被當成ES6模組
2、標籤的位置
<html>
<head>
<title>welcome to my page</title >
<script></script>
</head>
<body>
<!-- 這裡是內容 -->
<script></script>
</body>
</html>
3、指令碼的執行
- 推遲執行
<html>
<head>
<title>welcome to my page</title>
<!-- 指令碼會立即開始下載,待頁面載入完成後開始執行
按照HTML5規範example2在example1後執行,但實際卻並不一定總會頁面按順序執行
因此這樣鵝指令碼最好只有一個
-->
<script defer src="example1"></script>
<script defer src="example2"></script>
</head>
<body>
<!-- 這裡是內容 -->
<script></script>
</body>
</html>
- 非同步執行
<html>
<head>
<title> welcome to my page</title>
<!-- 指令碼會立即開始下載,但不保證按順序執行
非同步指令碼會在load事件(頁面載入完成)前執行
所以非同步指令碼不應再載入期間修改DOM
-->
<script async src="example1"></script>
<script async src="example2"></script>
</head>
<body>
<!-- 這裡是內容 -->
<script></script>
</body>
</html>
- 動態載入
function loadScript(path){
let script = document.createElement('script');
script.src = path;
/* 這種方式的script元素是以非同步方式載入的,相當於添加了async
但卻不是所有瀏覽器都支援async標籤
所以設定同步載入*/
script.async = false;
document.body.append(script);
}
//缺陷:以這種方式獲取的資源都是對瀏覽器預載入器不可見的。會嚴重影響它在資源獲取佇列中的優先順序
//解決方式 在文件頭部顯示宣告 <link rel = "preload" href = 'xxx.js' >;
4、noscript元素
noscript標籤可以包含任何出現再body中的元素,script除外。當條件滿足時,
瀏覽器將顯示包裹的內容。實現頁面優雅降級處理
當滿足下面任意條件觸發
- 瀏覽器不支援指令碼
- 瀏覽器禁用指令碼
<html>
<head>
<title>welcome to my page</title>
<script async src="example1"></script>
<script async src="example2"></script>
</head>
<body>
<!-- 這裡是內容 -->
<noscript>
<p>您的瀏覽器不支援javascript,請允許瀏覽器支援javascript或更換瀏覽器!</p>
</noscript>
<script></script>
</body>
</html>
總結
1、要引入外部js檔案,必須將src設定為要包含檔案的URL,檔案與網頁可不同域
2、在不使用defer、async屬性時,script 標籤會按照網頁中出現的順序依次被解釋
3、使用defer屬性可延遲指令碼待頁面載入完成後執行,延遲的指令碼按頁面中出現的順序執行
4、使用async屬性指令碼不需等待、不阻塞文件渲染既非同步載入,但不能按頁面出現順序執行