簡體   English   中英

Javascript 先加載,即使代碼在標簽末尾

[英]Javascript loads first even though code at the end of <body> tag

我在 HTML 文件的標記末尾添加了外部 Javascript 但是,警報首先加載,並且只有在警報上點擊“確定”按鈕時,內容才會加載。 下面是我的 HTML 和 JS 代碼。

*我已經嘗試過將腳本放入異步/延遲中。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>My Website</title>
    <link rel="stylesheet" href="styles.css">
  </head>
  <body>
    <h1>Hello</h1>

    <script src="index.js" charset="utf-8"></script>
  </body>
</html>

JS

alert("Hello");

DOM 解析通常發生在主線程上。 所以如果主 JavaScript 執行線程忙,DOM 解析將不會進行,直到線程空閑。

如果腳本元素是一個外部腳本文件,瀏覽器將開始從主線程下載外部腳本文件,但它將停止主線程的執行,直到該文件被下載。 這意味着在下載腳本文件之前不再解析 DOM。

您應該了解網站加載/解析/呈現時發生的步驟

取自: https://medium.com/jspoint/how-the-browser-renders-a-web-page-dom-cssom-and-rendering-df10531c9969#:~:text=When%20a%20web%20page% 20是%20Render%2DTree%20from%20it

如果你沒有使用 alert() function,你甚至不會注意到,但提醒的特別之處在於它會停止所有進一步的執行,直到你確認警報,關於上面寫的,這解釋了為什么頁面在確認警報后呈現

alert是一個同步的 function。請注意,將腳本放在主體的末尾僅意味着它會在解析頁面時運行,而不是在顯示內容時運行。 內容只在后面顯示 因為alert是同步的,它會先運行然后顯示內容。

您可以嘗試將正在執行的任何邏輯放在windowonload事件上,如下所示:

window.onload = () => {
  // logic goes here
  console.log('the document has been loaded');
};

Javascript 具有異步行為。 如果你想在做任何事情之前確保 dom 已加載,請考慮使用 Jquery

https://jquery.com/

在將 Jquery 庫放入 js 代碼之前:

$(document).ready(function(){

//... all your's stuffs here

});

專業提示:學習 Jquery 將帶領您創造令人驚嘆的事物!! 最好的祝福

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM