在HTML中引入JavaScript主要有以下三种方式:
一、内联脚本(Inline Script)
- 基础概念
- 直接在HTML元素的事件属性或者
<script>
标签内部编写JavaScript代码。
- 优势
- 简单直观,对于一些简单的交互逻辑,如点击按钮弹出提示框,可以直接写在HTML文件中,无需额外创建.js文件。
- 示例代码
- 在HTML按钮的
onclick
事件中编写JavaScript代码: - 在HTML按钮的
onclick
事件中编写JavaScript代码: - 或者使用
<script>
标签直接写在HTML文件中: - 或者使用
<script>
标签直接写在HTML文件中:
- 应用场景
- 小型的、一次性的交互效果,比如简单的表单验证提示(当用户输入不符合要求时立即显示提示信息)。
二、内部脚本(Internal Script)
- 基础概念
- 在HTML文件的
<head>
或者<body>
标签内部使用<script>
标签包裹JavaScript代码,但代码是独立于HTML元素之外的逻辑。
- 优势
- 相较于内联脚本,代码结构更清晰,便于维护。可以将相关的JavaScript逻辑集中管理在HTML文件的一个区域内。
- 示例代码
- 应用场景
- 对整个页面加载时进行一些初始化操作,如设置页面元素的初始样式、初始化一些全局变量等。
三、外部脚本(External Script)
- 基础概念
- 通过
<script>
标签的src
属性引入外部的.js文件。
- 优势
- 代码复用性高,可以在多个HTML页面中引用同一个.js文件。有利于提高网页加载速度(浏览器可以对.js文件进行缓存),并且方便团队协作开发,将HTML结构和JavaScript逻辑分离。
- 示例代码
- 假设有一个名为
script.js
的文件,内容如下: - 假设有一个名为
script.js
的文件,内容如下: - 在HTML文件中引入:
- 在HTML文件中引入:
- 然后在HTML中调用
sayHello
函数。
可能遇到的问题及解决方法
- 脚本加载顺序问题
- 如果外部脚本依赖于HTML中的元素,在脚本执行时可能会找不到这些元素。解决方法是将
<script>
标签放在</body>
标签之前,或者使用defer
属性(脚本会在页面解析完成后执行)或者async
属性(脚本异步加载,不保证执行顺序)。 - 示例:
- 示例:
- 跨域问题(当引入外部脚本来自不同域时可能遇到)
- 如果外部脚本所在的服务器没有正确设置CORS(跨域资源共享)头,浏览器会阻止脚本加载。解决方法是在服务器端设置正确的CORS策略,允许特定的域访问资源。