web前端 --- BOM编程、DOM编程

news2024/12/23 6:01:09

BOM编程(browser object model -- 浏览器对象模型)

BOM给JavaScript提供用来操作浏览器的若干的"方法"

操作

在 js 看来,一个完整的浏览器包含如下组件:

window窗口        // 整个浏览器的窗口

  • |-- history        //  浏览器的历史记录
  • |-- location        //  浏览器地址
  • |-- screen        //  屏幕分辨率
  • |-- navigator        //  浏览器内核信息
  • |-- document        //  文档对象(DOM)

(1)window窗口

windows代表的是浏览器本身,是浏览器代码化的一个实例对象,所以操作window对象相当于操作浏览器

window常见属性和方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
            function msg() {
                alert("3秒后出现");
            }
            // 定时器,表示多少时间后,执行函数
            // window.setTimeout(msg,3000);

            // 也可直接使用匿名函数
            setTimeout(function aa() {
                alert("5秒后出现");
            },5000)

            // 轮询器:每个多少秒,执行一次参数
            let timer = setInterval(function (){
                console.log("2s打印一次")
            },2000)

            setTimeout(()=> {
                // 清除轮询
                window.clearInterval(timer);
            },5000)

            // 清除轮询
            clearTimeout(numID);

            function moveBy(){
                window.moveBy(200,300);
            }

            function openNewWin(){
                window.open("http://www.baidu.com","_blank");
            }
    </script>
    <title>window对象</title>
</head>
<body>
    <button onclick="moveBy();">移动窗口</button>
    <button onclick="openNewWin();">打开窗口</button>
</body>
</html>

(2)history

history 对象是 window 对象的属性,它保存着用户上网的记录,这个记录的时间戳是从窗口被打开的那一刻算起。

PS:没有应用于history对象的公开标准,不过所有浏览器都支持该对象

history常见的属性和方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        console.log(window.history)

        function goBack(){
            window.history.back();
        }
        function goForward(){
            window.history.forward();
        }
        function goTo(){
            window.history.go(2);
        }
    </script>
    <title>history</title>
</head>
<body>
    <a href="fs.html">03</a>
    <button onclick="goBack();">后退</button>
    <button onclick="goForward();">前进</button>
    <button onclick="goTo();">go</button>
</body>
</html>

(3)screen

screen对象包含有关客户端显示屏幕的信息。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        // 操作系统的分辨率
        console.log(window.screen.height);
        console.log(window.screen.width);
        console.log(window.screen.availHeight);
        // 可达的height
        console.log(window.screen.availWidth);
        // 可达的width
    </script>
    <title>screen属性对象</title>
</head>
<body>
    
</body>
</html>

(4)navigator

navigator相关的一些常见属性:

(5)location

location对象有以下常见的属性和方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        console.log(window.location.href)
        // 控制台显示本地地址
        console.log(window.location.port)
        // 控制台显示端口
        console.log(window.location.pathname)
        // 控制台显示域名
        console.log(window.location.hostname)
        // 控制台显示主机名称
        console.log(window.location.host)
        // 控制台显示主机名称:端口
        console.log(window.location.search)
        // 控制台显示表单数据(?后面的数据)
        console.log(window.location.protocol)
        // 控制台显示网络协议   

        function reflush(){
            // window.location.reload();
            // 刷新页面

            window.location.replace(`https://www.baidu.com`);
            // 重新定位,更换地址
        }
    </script>
    <title>location</title>
</head>
<body>
    <button onclick="reflush()">刷新</button>

</body>
</html>

DOM编程(DOM:文档对象模型)

document对象管理页面的可见部分

        在前端开发中会使用到很多元素,如< title>、< h1>等,而为了方便使用这些已经定义的元素,将这些元素作为结点排成树状后,通过遍历这棵树,就可以很方便的调用这些元素。而这颗树就称为DOM树

(1)获取DOM对象的几种方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        window.onload = init;

        function init(){
            // 1、直接通过id获取,不推荐
            // console.log(box);

            // 2、通过api方式获取(依旧通过id获取)
            let box = document.getElementById("box");
            // 对象                         id
            // let box = document.querySelector("#box");  与api获取方式相同,不能用来获取类名称,类名称相同只能获取一个
            // querySelector,获取一个
            console.log(box);

            // 3、类名称获取,获取多个元素
            let msgs = document.getElementsByClassName("msg");
            // console.log(msgs);
            // 控制台显示3个元素,都是数组
            msgs[1].innerHTML = "qwert";
            // 通过下标方式访问

            // 4、通过标签名称获取
            const divs = document.getElementsByTagName("div");
            console.log(divs);
            // 常量

            // 5、通过name属性
            let username = document.getElementsByName("username");
            console.log(username[0]);

            username[0].value = "zhangsan";

            let msg = document.querySelectorAll(".msg");
            let div = document.querySelectorAll("div");
            // 直接获取多个,也可直接获取标签
        }
    </script>
    <title>获取DOM对象的方式</title>
</head>
<body>
    <div id="box">这是一个div标签</div>
    <div class="msg">div</div>
    <div class="msg">div</div>
    <div class="msg">div</div>
    <div class="msg">div</div>

    <input type="text" name="username" id="">
    <input type="text" name="password" id="">
</body>
</html>

(2)操作DOM对象的内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .box{
            color: yellowgreen;
            font-size: 25px;
            font-family: 仿宋;
        }
    </style>
    <script>
        function run(){
            let box = document.querySelector("#box");
            
            // box.innerHTML = "<h1 style='font-size:30px'>sss</h1>"; // innerHTML容易引起XSS(Cross Site Scripting)攻击
            // textConnect【w3c标准】与innerText效果相同
            // box.innerText = "qwerty";
            box.textContent = "qwerty";

            // box.style.border = "1px solid red";
            // box.style.color = "blue";

            box.className = "box";
            box["title"] = "这是标题";
            // 鼠标移动到box中内容显示

            alert(box.getAttribute("aa"));

        }

        function run02(){
            let box  = document.querySelector("#box");
            box.setAttribute("title","这是一个新的标题")
        }
    </script>
    <title>操作DOM对象内容</title>
</head>
<body>
    <div id="box" aa = "123"></div>
    <button onclick="run()">点击填充数据</button>
    <button onclick="run02()">点击填充数据</button>
</body>
</html>

(3)基于DOM的XSS攻击(XSS:跨站脚本攻击)

<1> 原因:

当js脚本从url获得数据并将其传递到支持动态代码执行的接收器时,就会产生基于DOM的XSS漏洞。也就是说不规范的使用接收器时就会产生基于DOM的XSS漏洞。因此基于DOM的XSS漏洞一般产生于用户能够进行参数输入查询的地方。

<2> 常见接收器

document.write()
document.writeln()
document.domain()
someDOMElement.innerHTML()
someDOMElement.outerHTML()
someDOMElement.insertAdjacentHTML()
someDOMElement.onevent()

<3> 手工挖掘基于DOM的XSS漏洞

找找看网页使用了那些接收器,再输入任意参数,然后查看参数所在位置,最后尝试写入XSS脚本所在的上下文看脚本能否成功执行。需要注意的是,当接收器为js执行接收器时,我们输入的参数可能不会出现在DOM的任何位置,此时我们可以通过js调试器来追踪我们输入参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/606700.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文笔记--Efficient Estimation of Word Representations in Vector Space

论文笔记--Efficient Estimation of Word Representations in Vector Space 1. 文章简介2. 文章概括3 文章重点技术3.1 NNLM(Neural Network Language Model)3.1.1 NNLM3.1.2 RNNLM(Recurrent Neural Net Language Model) 3.2 Continuous Bag-of-Words Model(CBOW)3.3 Continuo…

皮卡丘Over Permission

1.越权漏洞概述 如果使用A用户的权限去操作B用户的数据&#xff0c;A的权限小于B的权限&#xff0c;如果能够成功操作&#xff0c;则称之为越权操作。 越权漏洞形成的原因是后台使用了不合理的权限校验规则导致的。 一般越权漏洞容易出现在权限页面&#xff08;需要登录的页面…

省三医院新门诊大楼网络安全建设项目实施方案

省三医院新门诊大楼网络安全建设项目实施方案 甲方&#xff1a;省三医院 乙方&#xff1a;武汉埃郭信息技术有限公司1组吴冰冰 项目背景 省三医院新建一栋门诊大楼&#xff0c;地址位于原三医院东南处空地。为了响应国家建设数字医疗&#xff0c;构建医联网、医共体的号召&…

不要图片?CSS实现圆角边框渐变色+背景透明

前言 &#x1f44f;不要图片&#xff1f;CSS实现圆角边框渐变色背景透明&#xff0c;最近在工作中常常实现这些效果&#xff0c;速速来Get吧~ &#x1f947;文末分享源代码。记得点赞关注收藏&#xff01; 1.实现效果 2.实现原理 border-image&#xff1a; border-image CSS …

python基本操作3(速通版)

目录 一、字典 1.字典定义 2.字典的访问 3.字典的遍历 4.字典删除 5.字典练习 6.有序字典 7.集合 8.类型转化问题 9.公共方法 二、列表推导式 1.基本操作 2.在循环中使用if 三、组包和拆包 1.组包拆包基本应用 2.拆包的字典问题 四、python函数的一些特性 1.函…

【5.31 代随_43day】 最后一块石头的重量 II、目标和、一和零

最后一块石头的重量 II、目标和、一和零 最后一块石头的重量 II1.方法图解步骤![在这里插入图片描述](https://img-blog.csdnimg.cn/d2266317bc43491fb261f6372c2e0c9d.jpeg)代码 目标和1.方法图解步骤代码 一和零图解步骤代码 最后一块石头的重量 II 力扣连接&#xff1a;104…

状态机编程应用(收放卷停车方式控制)

有关状态机的详细介绍请参看下面的文章博客: PLC面向对象编程系列之有限状态机(FSM)详解_codesys 状态机_RXXW_Dor的博客-CSDN博客编写PLC控制机器动作类程序时,当分支比较少的时候我们使用if else语句解决,当分支比较多的时候,我们要使用CASE,END_CASE语句解决,针对分支…

微信小程序个人心得

首先从官方文档给的框架说起,微信小程序官方文档给出了app.js, app.json, app.wxss. 先从这三个文件说起. 复制 app.js 这个文件是整个小程序的入口文件,开发者的逻辑代码在这里面实现,同时在这个文件夹里面可以定义全局变量.app.json 这个文件可以对小程序进行全局配置,决定…

【6.01 代随_44day】 完全背包、零钱兑换 II、组合总和 Ⅳ

完全背包、零钱兑换 II、组合总和 Ⅳ 完全背包1.方法图解步骤 零钱兑换 II1.方法图解步骤代码 组合总和 Ⅳ图解步骤代码 完全背包 讲解连接&#xff1a;完全背包 1.方法 首先再回顾一下01背包的核心代码 for(int i 0; i < weight.size(); i) { // 遍历物品for(int j b…

javaScript蓝桥杯---分阵营,比高低

目录 一、介绍二、准备三、目标四、代码五、答案 一、介绍 期末考试结束不久&#xff0c;辛勤的园丁们就将所有学生的考试成绩汇总完毕。不过现在遇到一个问题&#xff0c;那就是目前所有学生的考试数据均混杂在一起。这些数据结构如下&#xff1a; [{name: "潇然"…

安装Pygame库:在Python中创建游戏的第一步

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 安装Pygame库 方法一、在pycharm内部直接安装 方法二、通过pip直接安装 验证安装 前言 Pygame是一个功能强大的Python游戏开发库&#xff0c;它提…

MCU器件选型---主流厂商

MCU(Micro Controller Unit)中文名称为微控制单元&#xff0c;又称单片微型计算机(Single Chip Microcomputer)&#xff0c;是指随着大规模集成电路的出现及其发展&#xff0c;将计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上&#xff0c;形成芯片级的计算机&…

SSRF漏洞、SQL注入、CSRF漏洞、XXE漏洞

SSRF漏洞 1.我理解的定义&#xff1a; 攻击者将伪造的服务器请求发给一个用户&#xff0c;用户接受后&#xff0c;攻击者利用该安全漏洞获得该用户的相关信息 2.原理&#xff1a; 3.场景&#xff1a; &#xff08;1&#xff09;分享 &#xff08;2&#xff09;转码 &#xff…

网络编程知识点总结(4)

sock服务端代码实现读写 前几章有具体介绍这几个函数&#xff0c;这里就简单罗列出来了 &#xff08;1&#xff09;socket()函数 int socket(int domain, int type, int protocol); &#xff08;2&#xff09;bind()函数: IP号端口号与相应描述字赋值函数 int bind(int soc…

shell编程之for循环

文章目录 shell编程之for循环一.for语句1.什么是for循环2.for语句的结构3.for语句中常用转义字符 二.for语句应用示例1.批量添加用户2.根据IP地址检查主机状态三.循环的次数1.循环次数的格式2.循环次数示例2.1求1-100的整数求和2.2 1-10的偶数求和 3.步长——seq3.1 1-10的偶的…

JavaScript对象详解(六)

JavaScript对象详解 1、对象的使用1.1、使用对象字面量法1.2、使用构造函数1.3、使用 Object.create() 2、继承与原型链2.1、基于原型链的继承2.1.1、继承属性2.1.2、继承方法 2.2、不同方式所生成的原型链2.2.1、使用语法结构2.2.2、使用构造器2.2.3、使用Object.create()2.2.…

【锂离子电池容量估算】电池单元总容量的递归近似加权总最小二乘估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

论文笔记--Deep contextualized word representations

论文笔记--Deep contextualized word representations 1. 文章简介2. 文章概括3 文章重点技术3.1 BiLM(Bidirectional Language Model)3.2 ELMo3.3 将ELMo用于NLP监督任务 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Deep contextualized word representations作者…

MMPose(openmmlab AI实战营二期第一节)

链接&#xff1a;人体关键点检测与MMPose_哔哩哔哩_bilibili 赶了个进度&#xff0c;实际上没听到&#xff0c;一个方向被浓缩成50分钟是有点难度。后续有需要再回顾吧 人体姿态估计&#xff1a;识别人体关键点坐标。模式识别任务&#xff0c;难点是始终在变化。以关键点连线…

chatgpt赋能python:如何使用Python匹配IP地址

如何使用Python匹配IP地址 如果你是一位网络管理员或是网络安全专家&#xff0c;那么你很可能需要经常处理IP地址。在一些情况下&#xff0c;你需要使用Python来自动化匹配或验证IP地址。在本文中&#xff0c;我们将介绍如何使用Python匹配IP地址。 IP地址的基础知识 在介绍…