当前位置:首页 > 行业动态 > 正文

html引入js

HTML引入JS有3种方式:1. 行内式,如onclick=function(); 2. 内嵌式,…; 3. 外链式,

HTML引入JavaScript的基本方式

内联脚本(直接在HTML中编写)

<script> 标签直接放在 HTML 的 <head><body> 中,编写 JavaScript 代码。

html引入js  第1张

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">内联脚本示例</title>
    <script>
        // 内联JavaScript代码
        alert("欢迎访问我的网页!");
    </script>
</head>
<body>
    <h1>这是一个HTML页面</h1>
</body>
</html>

外部脚本(链接外部.js文件)

将 JavaScript 代码单独保存为 .js 文件,通过 <script> 标签的 src 属性引入。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">外部脚本示例</title>
    <script src="main.js"></script> <!-引入外部脚本 -->
</head>
<body>
    <h1>这是一个HTML页面</h1>
</body>
</html>

<script> 标签的关键属性

属性 说明
src 指定外部 JavaScript 文件路径(仅用于外部脚本)
defer 延迟执行脚本,直到HTML文档完全解析后再执行(按顺序执行)
async 异步执行脚本,不保证执行顺序(加载完立即执行)
type 定义脚本类型(默认为 text/javascript,可省略)
crossorigin 处理跨域请求(如 anonymous 或指定域名)

脚本位置与执行时机

脚本位置 执行时机 推荐场景
<head> 中(无 defer/async HTML未完全加载时执行 可能阻塞页面渲染(不推荐)
<head> 中(defer HTML完全加载后按顺序执行 操作DOM元素的最佳选择
<body> 底部 HTML完全加载后执行 避免阻塞渲染,传统优化方式
<body> 中(无 defer/async 立即执行(可能阻塞后续内容) 少量简单脚本(需注意性能)

异步与延迟加载的区别

特性 defer async
执行顺序 按脚本出现顺序依次执行 不保证顺序,谁先加载完谁先执行
是否阻塞HTML解析 会阻塞,直到脚本下载完成 不阻塞,异步下载并执行
适用场景 依赖DOM的脚本 独立加载的脚本(如第三方库)

模块化脚本的引入(ES6+)

使用 type="module"

<script type="module" src="app.js"></script>
  • 支持 import/export 语法
  • 自动开启严格模式(Strict Mode)
  • 需通过 HTTP/HTTPS 协议加载

动态导入(按需加载)

// 在JavaScript中动态加载模块
import('./utils.js')
  .then(module => {
    module.sayHello(); // 调用导入的函数
  })
  .catch(err => console.error(err));

常见问题与解决方案

脚本未生效的可能原因

现象 原因 解决方案
浏览器控制台报错 语法错误、路径错误、跨域限制 检查代码语法、确认文件路径、设置CORS
DOM元素未找到 脚本在DOM元素加载前执行(如放在<head>且未加defer 将脚本移到<body>底部或添加defer
第三方库冲突 多个脚本使用相同全局变量或未正确封装作用域 使用模块化或命名空间

外部脚本加载失败的处理

<script src="https://example.com/lib.js" integrity="sha384-XXX" crossorigin="anonymous"></script>
<script>
  if (!window.Lib) {
    console.error('第三方库加载失败,请检查网络或路径!');
    // 回退方案:加载本地备用文件
    document.write('<script src="lib-fallback.js"></script>');
  }
</script>

相关问题与解答

问题1:为什么推荐将外部脚本放在<body>底部而不是<head>中?

解答
将脚本放在<body>底部可以确保HTML元素已完全加载,避免脚本因找不到DOM元素而报错,浏览器在解析HTML时不会因加载脚本而阻塞渲染,提升页面加载速度,如果必须放在<head>中,建议添加defer属性。


问题2:deferasync有什么区别?如何选择?

解答

  • defer:脚本会并行下载,但延迟到HTML解析完成后按顺序执行,适合需要按顺序加载的脚本(如依赖DOM的脚本)。
  • async:脚本尽快加载并立即执行,不保证执行顺序,适合独立加载的脚本(如第三方分析工具)。
    选择建议:若脚本依赖DOM或需要按顺序执行,用defer;若脚本独立且无需等待,用
0