<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Web前端入門第 88 問:引入 JavaScript 的 script 標簽究竟有多少用法?

      HTML 版本不停的更新迭代,也導致瀏覽器支持的寫法眼花繚亂,就拿 script 標簽來說,剛剛入行的那會兒就只知道用來寫內聯的 js 代碼,后來又學到了引入 js 文件,ES 模塊規范化之后又知道能用來引入模塊化的 js 代碼,可這就是它的全部了嗎??

      然而...并不是!!!

      各種用法

      看看 script 千奇百怪的用法,一定有你沒見過的~~

      1、內聯腳本

      如文章開頭說的一樣,直接用來寫內聯腳本,本公眾號大部分文章都是使用內聯腳本的方式所寫:

      <script>
        const name = '公眾號:前端路引'
        console.log(name)
      </script>
      

      2、引入外部腳本

      使用 src 屬性直接引入外部腳本,這是目前大部分前端項目的用法,雖然 vite 直接使用 ES 模塊化打包,但要兼容低版本瀏覽器還是得轉成普通的 js 文件引入:

      <script src="project/path/script.js"></script>
      

      3、defer 延遲

      標簽的 defer 屬性可以控制腳本異步加載,并且能讓腳本順序執行:

      <script defer src="project/path/script1.js"></script>
      <script defer src="project/path/script2.js"></script>
      

      以上腳本就算寫在 head 標簽中,也不會阻止 dom 解析,而且 script2.js 一定是在 script1.js 之后執行。

      4、async 異步

      async 也能控制腳本異步加載,但不同的是 async 加載的腳本無法保證腳本執行順序。

      <script async src="project/path/script1.js"></script>
      <script async src="project/path/script2.js"></script>
      

      以上腳本沒辦法保證 script1.js 一定會先執行!!!此屬性一般多用于加載與項目流程無關的一些 js 文件,比如說:統計代碼、廣告代碼等等。

      5、動態加載腳本

      使用 js 創建 script 標簽引入 js 文件,即可實現 js 腳本的動態加載:

      const script = document.createElement('script');
      script.src = 'dynamic.js';
      script.onload = function () {
        console.log('dynamic.js 加載成功!');
      }
      script.onerror = function () {
        console.log('dynamic.js 加載失敗!');
      }
      // 腳本插入到頁面中才會開始加載
      document.head.appendChild(script);
      

      6、資源完整性校驗

      integrity 屬性能用于校驗資源是否被篡改,詳細算法參考:https://developer.mozilla.org/zh-CN/docs/Web/Security/Subresource_Integrity

      <script src="https://cdn.xxx.com/jquery.js" integrity="sha384-...">
      </script>
      

      7、跨域控制

      crossorigin 屬性用于控制跨域請求的憑據傳遞:

      <script src="https://other-domain.com/script.js" crossorigin="anonymous"></script>
      
      • anonymous:不發送憑據(如 Cookies)
      • use-credentials:發送憑據

      8、ES 模塊

      使用 type="module" 即可在 script 標簽內使用 ES 模塊語法,這與瀏覽器的版本有關,一些低版本可能并不支持!!

      <script type="module" src="main.mjs"></script>
      <script type="module">
        import { foo } from './foo.js';
      </script>
      

      9、nomodule 兼容

      nomodule 屬性,用于兼容不支持 ES 模塊的瀏覽器,如果瀏覽器不支持 ES 模塊,則 nomodule 屬性下的腳本會被執行,反之則不會執行。

      <script nomodule src="project/path/fallback.js"></script>
      

      10、動態導入

      ES 模塊允許在代碼執行時導入模塊,此方式就稱之為 動態導入

      <script type="module">
        const isMobile = navigator.userAgent.match(/mobile/i);
        if (isMobile) {
          import('./project/path/mobile.js').then(module => {
            module.default();
          })
        }
      </script>
      

      11、模塊映射

      type="importmap" 屬性允許指定 ES 模塊的映射關系,在后續書寫時候就不必再寫完整的模塊路徑,可以只寫模塊名:

      <script type="importmap">
      {
        "imports": {
          "lodash": "https://cdn.jsdelivr.net/npm/lodash@4.17.21/+esm"
        }
      }
      </script>
      <script type="module">
        import _ from "lodash"; // 實際加載 CDN 資源
        _.chunk([1, 2, 3], 2);
      </script>
      

      12、模版字符串

      利用自定義的 type 屬性,可以將一些 HTML 字符串寫在 script 標簽中,比如 vue 的模版字符串:

      <script type="text/x-template" id="index">
        <div class="index">
          <h3>點擊歷史記錄跳轉會保存滾動條位置</h3>
          <p v-for="(item,index) in list" :key="index">
            <template v-if="index % 8 !== 0">
              {{ index }}
            </template>
            <template v-else>
              <p><a href="javascript:;" @click="$router.go(1)">歷史記錄前往下一頁</a></p>
              <router-link :to="{ name: 'details' }">跳轉前往詳情頁</router-link>
            </template>
          </p>
        </div>
      </script>
      <script>
        var list = (new Array(50)).fill('1')
        Vue.component('Index', {
          template: '#index',
          data: function () {
            return {
              list: list
            }
          },
        })
      </script>
      

      實驗性屬性

      • fetchpriority:允許指定外部腳本的加載優先級。有效值:high/low/auto
      • blocking:可以指定在腳本加載時,瀏覽器中的頁面渲染應該被阻斷。有效值:render

      寫在最后

      強大的 script 標簽早就不止用于寫 js 代碼了,各種用法真是讓人眼花繚亂,一不小心就踩到沒見過的用法~~

      參考資料:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Reference/Elements/script

      posted @ 2025-10-11 11:11  前端路引  閱讀(294)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 麻豆精品一区二正一三区| 日韩欧美不卡一卡二卡3卡四卡2021免费| 国产免费人成网站在线播放 | 国产午夜精品福利视频| 最新av中文字幕无码专区| 丁香五月亚洲综合在线国内自拍| 人妻av中文字幕无码专区| 精品亚洲国产成人av| 国产精品久久久国产盗摄| 久久久久青草线综合超碰| 国产成人精品亚洲一区二区| 亚洲香蕉网久久综合影视| 十八禁午夜福利免费网站 | 国产网友愉拍精品视频手机 | 亚洲国产成人久久综合三区| 奇米影视7777久久精品| 久久久av男人的天堂| 国产精品自拍视频免费看| 陈巴尔虎旗| 性男女做视频观看网站 | 国精品午夜福利视频不卡| 扶风县| 麻豆成人精品国产免费| 欧美高清一区三区在线专区| 成人无码午夜在线观看| 国产成人永久免费av在线| 亚洲第一区二区快射影院| 欧美成人精品手机在线| 老女老肥熟国产在线视频| 亚洲最大成人在线播放| 国产乱妇乱子视频在播放| 又爽又大又黄a级毛片在线视频| 国产性生大片免费观看性| 色猫咪av在线观看| 国产无遮挡免费视频免费| 国产草草影院ccyycom| 欧美激情一区二区三区成人| 久热这里只精品视频99| 亚洲精品一区久久久久一品av | 精品国产乱码久久久久乱码| 亚洲免费一区二区av|