切換語言為:簡體

如何修復 JavaScript 中的 "ReferenceError: document is not defined"報錯問題?

  • 爱糖宝
  • 2024-07-19
  • 2122
  • 0
  • 0

JavaScript 中的“ReferenceError:document is not defined”錯誤是嘗試在瀏覽器環境(例如Node.js)之外訪問文件物件時發生的常見問題。如果指令碼在 HTML 文件完全載入之前執行,也會出現這種錯誤。 本文將探討導致此錯誤的原因,並提供解決方法。

問題陳述

文件物件是 Web API 的一部分,只能在瀏覽器上下文中使用。 在 Node.js 等環境中執行 JavaScript 時,文件物件不可用,從而導致 "ReferenceError"。 此外,在瀏覽器完全載入頁面之前嘗試訪問文件物件也會導致此錯誤。

請看下面的 JavaScript 程式碼:

console.log(document.getElementById("myElement"));

如果在 Node.js 環境中執行此程式碼,就會出現錯誤:

如何修復 JavaScript 中的 "ReferenceError: document is not defined"報錯問題?

ReferenceError: document is not defined“(JavaScript 中的 ReferenceError: document is not defined)

解決錯誤的方法

爲了解決這個問題,我們需要確保在適當的環境(瀏覽器)和正確的時間(DOM完全載入後)訪問文件物件。

1. 檢查環境

如果程式碼依賴於文件物件,請確保程式碼在瀏覽器環境中執行。 如果我們需要在 Node.js 中執行程式碼,則應使用 jsdom 等庫來模擬瀏覽器環境。

2.使用 window.onload

確保指令碼在載入完整個頁面後執行:

window.onload = function() {
    console.log(document.getElementById("myElement"));
};

3.使用 DOMContentLoaded 事件

確保指令碼在 DOM 完全載入後並且在影象以及樣式表等其他資源之前執行:

document.addEventListener("DOMContentLoaded", function() {
    console.log(document.getElementById("myElement"));
});

4. 將指令碼放在正文的末尾

將指令碼標記放在正文部分的末尾,以便它們在解析 HTML 後執行:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document Error Example</title>
</head>
<body>
    <div id="myElement">Hello World</div>
    <script>
        console.log(document.getElementById("myElement"));
    </script>
</body>
</html>

示例:透過使用 window.upload 來修復上述錯誤。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" 
          content="width=device-width, initial-scale=1.0">
    <title>Document Error Example</title>
</head>
<body>
    <div id="myElement">Hello World</div>
    <script>
        window.onload = function() {
            console.log(document.getElementById("myElement"));
        };
    </script>
</body>
</html>

輸出

<div id="myElement">Hello World</div>

示例:透過使用 DOMContentLoaded 事件來修復上述錯誤的實現。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document Error Example</title>
</head>
<body>
    <div id="myElement">Hello World</div>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            console.log(document.getElementById("myElement"));
        });
    </script>
</body>
</html>

輸出

<div id="myElement">Hello World</div>

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.