第2章 在网页中使用JavaScript

2023-11-17

第2章 在网页中使用JavaScript

与能够独立执行的C/C++等传统语言不同,执行JavaScript代码需要HTML网页环境。在当初开发JavaScript时,Netscape把JavaScript定位为嵌入式Web脚本语言,这种做法被保留了下来,并被正式纳入HTML规范当中。本章将详细介绍如何在网页中编写JavaScript代码并执行,同时介绍如何在浏览器中进行JavaScript代码调试和错误处理。


【学习重点】


▲ 灵活使用<script>标签


▲ 了解JavaScript脚本存放位置


▲ 会用<script>标签


▲ 了解JavaScript执行顺序


▲ 了解JavaScript错误处理机制(选学)


▲ 了解JavaScript代码调试方法(选学)


2.1 使用<script>标签


通常情况下,在Web页面中使用JavaScript有两种方法,一种是在页面中直接嵌入JavaScript代码,另一种是链接外部JavaScript文件。


在HTML页面中嵌入JavaScript脚本需要使用<script>标签,用户可以在<script>标签中直接编写JavaScript代码,或者单独编写JavaScript文件,然后通过<script>标签导入。


2.1.1 编写第一个JavaScript程序

下面通过示例演示如何使用<script>标签的两种方式(直接在页面中嵌入JavaScript代码和链接外部JavaScript文件)。


【示例1】直接在页面中嵌入JavaScript代码。


第1步,新建HTML文档,保存为test.html。然后在标签内插入一个<script>标签。


第2步,为<script>标签指定type属性值为"text/JavaScript"。现在的浏览器默认<script>标签的类型为JavaScript脚本,因此省略type属性,依然能够被正确执行,但是考虑到代码的兼容性,建议定义该属性。


第3步,直接在<script>标签内部输入JavaScript代码:



上面JavaScript脚本先定义了一个hi()函数,该函数被调用后会在页面中显示字符"Hello,World!"。document表示DOM网页文档对象,document.write()表示调用Document对象的write()方法,在当前网页源代码中写入HTML字符串"

Hello,World!

"。


调用hi()函数,浏览器将在页面中显示一级标题字符"Hello,World!"。


第4步,保存网页文档,在浏览器中预览,显示效果如图2-1所示。




图2-1 第一个JavaScript程序




提示:包含在<script>标签内的JavaScript代码被浏览器从上至下依次解释。



当使用<script>标签嵌入JavaScript代码时,不要在代码中的任何地方输出" script>"字符串。例如,浏览器在加载下面所示的代码时就会产生一个错误:



错误原因:当浏览器解析到字符串" script>"时,会结束JavaScript代码段的执行。


解决方法:



使用转义字符把字符串" script>“分成两部分来写就不会造成浏览器的误解。


【示例2】链接外部JavaScript文件。


第1步,新建文本文件,保存为test.js。注意,扩展名为.js,它表示该文本文件是JavaScript类型的文件。



提示:使用<script>标签包含外部JavaScript文件时,默认文件类型为JavaScript,因此.js扩展名不是必需的,浏览器不会检查包含JavaScript的文件的扩展名。在高级开发中,使用JSP、PHP或其他服务器端语言动态生成JavaScript代码时可以使用任意扩展名,如果不使用.js扩展名,用户应确保服务器能返回正确的MIME类型。



第2步,打开test.js文本文件,在其中编写下面代码,定义简单的输出函数。



在上面代码中,alert()表示Window对象的方法,调用该方法将弹出一个提示对话框,显示参数字符串"Hello,World!”。


第3步,保存JavaScript文件,注意与网页文件的位置关系。这里保存JavaScript文件位置与调用该文件的网页文件位于相同目录下。


第4步,新建HTML文档,保存为test1.html。然后在标签内插入一个<script>标签。定义src属性,设置属性值为指向外部JavaScript文件的URL字符串。代码如下:



     <script type=“text/JavaScript” src=“test.js”>
   
   script>


第5步,在上面<script>标签下一行继续插入一个<script>标签,直接在<script>标签内部输入JavaScript代码,调用外部JavaScript文件中的hi()函数。



第6步,保存网页文档,在浏览器中预览,显示效果如图2-2所示。




图2-2 调用外部函数弹出提示对话框




提示:定义src属性的<script>标签不应再包含JavaScript代码。如果嵌入了代码,则只会下载并执行外部JavaScript文件,嵌入代码会被忽略。



<script>标签的src属性可以包含来自外部域的JavaScript文件。例如:



     <script type=“text/JavaScript” src=“http://www.sothersite.com/test.js”>
   
   script>


这些位于外部域中的代码也会被加载和解析。因此在访问自己不能控制的服务器上的JavaScript文件时要小心,防止恶意代码,或者防止恶意人员随时可能替换JavaScript文件中的代码。


【拓展】HTML为<script>定义了6个属性,简单说明如下。


☑ async:可选。表示应该立即下载脚本,但不应妨碍页面中其他操作,如下载其他资源或等待加载其他脚本。该功能只对外部JavaScript文件有效。


☑ charset:可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此很少使用。


☑ defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。该属性只对外部JavaScript文件有效。IE 7及更早版本对嵌入的JavaScript代码也支持这个属性。


☑ language:已废弃。原来用于表示编写代码使用的脚本语言,如JavaScript、JavaScript l.2或VBScript。大多数浏览器会忽略这个属性,不建议再使用。


☑ src:可选。表示包含要执行代码的外部文件。


☑ type:可选。可以看成是language的替代属性,表示编写代码使用的脚本语言的内容类型(也称为MIME类型)。虽然text/JavaScript和text/ecmascript已经不被推荐使用,但人们一直习惯使用text/JavaScript。服务器在传送JavaScript文件时使用的MIME类型通常是application/x-JavaScript,但在type中设置这个值可能导致脚本被忽略。另外,在非IE浏览器中还可以使用application/JavaScript和application/ecmascript。考虑到约定俗成和浏览器最大限度的兼容性,目前在客户端,type属性值一般使用text/JavaScript。不过,这个属性并不是必需的,如果没有指定这个属性,则其默认值仍为text/JavaScript


2.1.2 脚本位置

所有<script>标签都会按照它们在HTML中出现的先后顺序依次被解析。在不使用defer和async属性的情况下,只有在解析完前面<script>标签中的代码之后,才会开始解析后面<script>标签中的代码。


【示例1】在默认情况下,所有<script>标签都应该放在页面头部的标签中。



这样就可以把所有外部文件(包括CSS文件和JavaScript文件)的引用都放在相同的地方。但是,在文档的标签中包含所有JavaScript文件,意味着必须等到全部JavaScript代码都被下载、解析和执行完成以后,才能开始呈现页面的内容。如果页面需要很多JavaScript代码,这样无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白。


【示例2】为了避免延迟问题,现代Web应用程序一般都把全部JavaScript引用放在标签中页面的内容后面。



这样,在解析包含的JavaScript代码之前,页面的内容将完全呈现在浏览器中,同时会感到打开页面的速度加快了。


2.1.3 延迟执行脚本

为了避免脚本在执行时影响页面的构造,HTML为<script>标签定义了defer属性。defer属性能够迫使脚本被延迟到整个页面都解析完毕后再运行。因此,在<script>标签中设置defer属性,相当于告诉浏览器虽然可以立即下载JavaScript代码,但延迟执行。


【示例】在下面的示例中,虽然把<script>标签放在文档的标签中,但其中包含的脚本将延迟到浏览器遇到标签后再执行。



HTML5规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而这两个脚本会先于DOMContentLoaded事件执行。在实际应用中,延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发前执行,因此最好只包含一个延迟脚本。



提示:defer属性只适用于外部脚本文件。这一点在HTML5中已经明确规定,因此支持HTML5的实现会忽略给嵌入脚本设置的defer属性。IE 4~IE 7还支持对嵌入脚本的defer属性,但IE 8及之后版本则完全支持HTML5规定的行为。


IE 4、Firefox 3.5、Safari 5和Chrome是最早支持defer属性的浏览器。其他浏览器会忽略这个属性。因此,把延迟脚本放在页面底部仍然是最佳选择。




注意:在XHTML类型的文档中,defer属性应该定义为defer=“defer”。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第2章 在网页中使用JavaScript 的相关文章

  • LeetCode刷题笔记-压缩字符串

    压缩字符串 给你一个字符数组 chars 请使用下述算法压缩 从一个空字符串 s 开始 对于 chars 中的每组 连续重复字符 如果这一组长度为 1 则将字符追加到 s 中 否则 需要向 s 追加字符 后跟这一组的长度 压缩后得到的字符串
  • 10个程序员常用的代码简写技术,看懂一种是入门,全懂就是大神

    今天小编我给大家整理了一份10个程序员常用的代码简写技术 看懂一种是入门 全懂就是大神 你能知道几个呢 这篇文章分享之前我还是要推荐下我自己的前端群 595549645 不管你是小白还是大牛 小编我都挺欢迎 不定期分享干货 包括我自己整理的
  • Qt 模型视图编程之自定义只读数据模型

    背景 Qt 中的模型视图架构是用来实现大量数据的存储 处理及其显示的 主要原理是将数据的存储与显示分离 模型定义了标准接口对数据进行访问 视图通过标准接口获取数据并定义显示方式 模型使用信号与槽机制通知视图数据变化 QModelIndex
  • asm.js 和 Emscripten 入门教程

    文章转载自 http www ruanyifeng com blog 2017 09 asmjs emscripten html Web 技术突飞猛进 但是有一个领域一直无法突破 游戏 游戏的性能要求非常高 一些大型游戏连 PC 跑起来都很

随机推荐

  • Webpack5 搭建Vue项目(进阶版)

    Webpack5 搭建Vue项目 进阶版 提示 中间隔了好长时间 我胡汉三又回来继续更新了 文章目录 Webpack5 搭建Vue项目 进阶版 前言 一 进阶版本有哪些特点 二 主要的文件代码如下 1 设置一个公共配置 webpack co
  • 使用小工具QuickLook的使用

    终于期末考试结束了 正式步入科研生活 今天正好看到了quicklook这个软件 就顺便下载一下来试试 经常我们困难会为了简单的查看一个文件 却要等待一个大型软件的缓慢加载过程 比如 m ppt文件 在使用这个软件后 不必等待 重型 的 Of
  • 快速从网页爬取图片数据

    1 代码实现 import os import re import time from selenium import webdriver from bs4 import BeautifulSoup from urllib request
  • 数据采集与埋点简介之 代码埋点、可视化埋点与无痕埋点

    转自 https sensorsdata cn blog shu ju jie ru yu mai dian 博主做移动手机系统中的数据采集与埋点也有近两年 那段时间内一方面是集中在具体的开发和问题细节处理 另外一方面则是在把采集系统适配到
  • 数据库性能

    1 建立合理的索引 2 优化SQL语句 3 优化表结构 能用小字段类型就用小字段类型 如能用short就不用int 能用数据类型就不用字符串类型 4 拆分表 横向拆分不更改表结构 重复多建立几张表 纵向拆分影响表结构 通过索引连接多个表 5
  • 2021-03-18-C++学习之17-stack、queue、list

    一 stack容器 1 stack基本概念 stack是一种先进后出 First In Last Out FILO 的数据结构 它只有一个出口 只有顶部元素才可以被外界使用 因此栈不允许有遍历行为 通常有empty函数来判断容器是否为空 s
  • LeetCode 49. 字母异位词分组

    Description 题目大意 给定一个字符串数组 返回字母相同的字符串数组 解题思路 算法标签 哈希表 1 将排序好的字符串设置为key 2 然后存储对应的字符串 代码 class Solution public vector
  • JDBC定义及编程步骤

    0目录 1 JDBC定义 2 为什么需要JDBC 3 JDBC的工作原理 4 JDBC API 5 JDBC编程模板 6 JDBC编程步骤 7 JDBC实战 1 JDBC定义 定义 Java连接数据库的一种能力或者技术 2 为什么需要JDB
  • macos 安装rust

    官方建议使用rustup来安装 rustup可以方便的在不同的rust版本之间切换 brew install rustup 使用rustup安装Rust编译器 rustc 和Rust包管理器 cargo rustup init 执行完上述两
  • 文件上传漏洞靶场upload-labs学习(pass1-pass5)

    Upload Labs学习 0x00 upload labs简介 0x01 upload labs环境搭建 0x02 Pass1 前端判断绕过 0x03 Pass2 content type类型绕过 上传测试 源代码阅读 0x04 Pass
  • 第六篇 VGGNet——模型精讲

    文章目录 模型介绍 网络组成 VGG16 VGG16 pytoch代码实现 版本一 版本二 VGG16详细参数 模型特性 关于dense evaluation 与multi cr
  • 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)

    第十四届蓝桥杯模拟赛第一期 1 二进制位数 问题描述 答案提交 参考答案 2 晨跑 问题描述 答案提交 参考答案 3 调和级数 问题描述 答案提交 参考答案 程序验证 4 山谷 问题描述 答案提交 参考答案 5 最小矩阵 问题描述 答案提交
  • LCD DRM驱动框架分析一

    本文是基于rk3566 rk3568平台 从概念和框架上对LCD DRM驱动框架进行分析 一 DRM Direct Rendering Manager 简介 DRM 是 Linux 目前主流的图形显示框架 相比 FB 架构 DRM 更能适应
  • echarts 富文本的写法

    实现eCharts的 不同柱子不同样式 或系列下的 不同css样式 的匹配 或者 实现 不同柱子添加不同的说明文字 通过params参数判断 使用不同样式 return name4 固定字符1 value 固定字符2 其中 name4 是c
  • buuoj Exec writeup

    题目 十四 题型 web 题目 ACTF2020 新生赛 Exec 来源 buuoj https buuoj cn 思路 操作系统的指令 具体步骤 Step1 发现题目是要我们ping 我们尝试ping一下127 0 0 1 猜测是应用pi
  • MyCAT在Windows 10环境下安装和启动

    1 下载 从如下地址下载mycat的安装包 https github com MyCATApache Mycat Server eg Mycat server 1 6 7 6 release 20210303094759 win tar g
  • Java数组之数组

    一 数组的概述 数组 Array 是多个相同类型数据按一定顺序排列 的集合 并使用一个名字名 并通过编号的方式 对这些数据进行统一管理 数组的常见概念 数组名 下标 或索引 元素 数组的长度 数组本身是引用数据类型 而数组中的元素可以是任何
  • 百度人脸识别C++对接

    一 注册 id 及上载SDK 二 json openssl curl C 11 这个可以从服务器的winC 的SDK包里找 也可以自己找相应源码编译 三 加入下载的 aip cpp sdk 0 8 1 包 错误 C4996 fopen Th
  • 《深入理解计算机系统》(美)布赖恩特(Bryant,R.E.) 等

    书籍 深入理解计算机系统 美 布赖恩特 Bryant R E 等 适合对象 对计算机感兴趣的朋友 需要相关资料的可私信我 2023 09 20更新完成 先上个大纲框架图 第一章 计算机系统漫游 主要知识点 解读全书结构框架 解释OS的原理和
  • 第2章 在网页中使用JavaScript

    第2章 在网页中使用JavaScript 与能够独立执行的C C 等传统语言不同 执行JavaScript代码需要HTML网页环境 在当初开发JavaScript时 Netscape把JavaScript定位为嵌入式Web脚本语言 这种做法