首頁  >  問答  >  主體

在瀏覽器嘗試渲染 HTML 元素之前對其進行打亂。這是“document.write”的罕見有效用例嗎?

我的網頁上有一個標題區域,其中有一些循環顯示的背景圖片。

它們的解析度有些高,而且位於首屏,因此我不希望瀏覽器開始加載第一個圖像之外的任何圖像。

但我還想隨機化圖像的順序。

問題在於我使用的是靜態 Web 主機 (Netlify)。

我考慮過的一些方法:

我想要做的是在瀏覽器看到整個 HTML 回應之前運行一些 JS 程式碼,運行一些簡短的邏輯,並向流中添加一些標記。然後我可以在

我發現這正是 document.write 所做的,不是嗎?

所有資源都說要像瘟疫一樣避免 document.write。但我想知道這是否是一個罕見的有效用例?

<html>
  <body>
    <p>This seems to work, and I kind of think it's not a terrible idea.</p>
    <script type="application/javascript">
      // Standard Fisher-Yates shuffle; not relevant
      function shuffle(array) { let i = array.length, j; while (i != 0) { j = Math.floor(Math.random() * i); i--; [array[i], array[j]] = [array[j], array[i]]; } return array; }

      const paras = [
        "<p>para 1</p>",
        "<p>para 2</p>",
        "<p>para 3</p>",
        "<p>para 4</p>",
      ];
      shuffle(paras);
      document.write(paras.join(""));
    </script>
    <noscript>
      <p>para 1</p>
      <p>para 2</p>
      <p>para 3</p>
      <p>para 4</p>
    </noscript>
    <p>Change my mind.</p>
  </body>
</html>

這是一個糟糕的主意嗎?為什麼?有沒有更好的方法來實現我的願望?

P粉752290033P粉752290033283 天前435

全部回覆(1)我來回復

  • P粉349222772

    P粉3492227722024-01-11 16:07:11

    是的,這不是一個好主意。該方法非常古老,並且具有可能因瀏覽器而異的特定行為。請參閱 https://developer.mozilla.org/en- US/docs/Web/API/Document/write 以了解更多資訊。

    只需使用現代方法,例如:

    #等等。隨機排列元素,因為這些元素對於渲染器/瀏覽器來說是安全的。

    不過,針對您的特定用例的建議是:瀏覽器需要先載入 JavaScript 才能使其按照您想要的方式運作,但這可能不會發生。圖像可能仍在按照它們最初在 HTML 來源中的順序載入。如果可能的話,我建議將此邏輯移至伺服器。 最終,任何 Javascript 都可能不適用於您的用例。可能可以不在文件本身中包含圖像,然後透過 JS 添加它們(在隨機加載時),這將是我的首選方法。

    回覆
    0
  • 取消回覆