1. 程式人生 > 其它 >認識script標籤

認識script標籤

技術標籤:筆記前端jsjavascriptwebhtml

認識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、指令碼的執行

  1. 推遲執行
<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>
  1. 非同步執行
<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>
  1. 動態載入
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、在不使用deferasync屬性時,script 標籤會按照網頁中出現的順序依次被解釋
3、使用defer屬性可延遲指令碼待頁面載入完成後執行,延遲的指令碼按頁面中出現的順序執行
4、使用async屬性指令碼不需等待、不阻塞文件渲染既非同步載入,但不能按頁面出現順序執行