热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python网页交互引擎_掌握WebAPI,开发常见的页面交互功能(进阶一)

学习目标:掌握API和WebAPI的概念掌握常见的浏览器提供的API的调用方式能通过API开发常见的页面交互功能能够利用搜索引擎解决问题WebAPIAPI的概念API(Applic

学习目标:

掌握API和Web API的概念

掌握常见的浏览器提供的API的调用方式

能通过API开发常见的页面交互功能

能够利用搜索引擎解决问题

Web API

API的概念

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

任何开发语言都有自己的API

API的特征输入和输出(I/O)

API的使用方法(console.log())

Web API的概念

浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM)

此处的Web API特指浏览器提供的API(一组方法),Web API在后面的课程中有其它含义

掌握常见的浏览器提供的API的调用方式

Javascript的组成

ECMAScript - Javascript的核心

定义了Javascript的语法规范

Javascript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与具体实现无关

BOM - 浏览器对象模型

一套操作浏览器功能的API

通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等

DOM - 文档对象模型

一套操作页面元素的API

DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作

BOM

BOM的概念

BOM(Browser Object Model) 是指浏览器对象模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构。BOM由多个对象组成,其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。

我们在浏览器中的一些操作都可以使用BOM的方式进行编程处理,

比如:刷新浏览器、后退、前进、在浏览器中输入URL等

BOM的顶级对象window

window是浏览器的顶级对象,当调用window下的属性和方法时,可以省略window

注意:window下一个特殊的属性 window.name

对话框

alert()

prompt()

confirm()

页面加载事件

onload

window.onload = function () {

// 当页面加载完成执行

// 当页面完全加载所有内容(包括图像、脚本文件、CSS 文件等)执行

}

onunload

window.onunload = function () {

// 当用户退出页面时执行

}

定时器

setTimeout()和clearTimeout()

在指定的毫秒数到达之后执行指定的函数,只执行一次

// 创建一个定时器,1000毫秒后执行,返回定时器的标示

var timerId = setTimeout(function () {

console.log('Hello World');

}, 1000);

// 取消定时器的执行

clearTimeout(timerId);

setInterval()和clearInterval()

定时调用的函数,可以按照给定的时间(单位毫秒)周期调用函数

// 创建一个定时器,每隔1秒调用一次

var timerId = setInterval(function () {

var date = new Date();

console.log(date.toLocaleTimeString());

}, 1000);

// 取消定时器的执行

clearInterval(timerId);

location对象

location对象是window对象下的一个属性,时候的时候可以省略window对象

location可以获取或者设置浏览器地址栏的URL

URL

统一资源定位符 (Uniform Resource Locator, URL)

URL的组成

scheme://host:port/path?query#fragment

scheme:通信协议

常用的http,ftp,maito等

host:主机

服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。

port:端口号

整数,可选,省略时使用方案的默认端口,如http的默认端口为80。

path:路径

由零或多个'/'符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

query:查询

可选,用于给动态网页传递参数,可有多个参数,用'&'符号隔开,每个参数的名和值用'='符号隔开。例如:name=zs

fragment:信息片断

字符串,锚点.

location有哪些成员?

使用chrome的控制台查看

查MDN

MDN

成员

assign()/reload()/replace()

hash/host/hostname/search/href……

history对象

back()

forward()

go()

navigator对象

userAgent

通过userAgent可以判断用户浏览器的类型

platform

通过platform可以判断浏览器所在的系统平台类型.

DOM

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM。Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在Javascript与JScript一决生死,于是大规模的赋予浏览器强大的功能。微软在网页技术上加入了不少专属事物,既有Vbscript、ActiveX、以及微软自家的DHTML格式等,使不少网页使用非微软平台及浏览器无法正常显示。DOM即是当时蕴酿出来的杰作。

DOM又称为文档树模型

文档:一个网页可以称为文档

节点:网页中的所有内容都是节点(标签、属性、文本、注释等)

元素:网页中的标签

属性:标签的属性

DOM经常进行的操作

获取元素

动态创建元素

对元素进行操作(设置其属性或调用其方法)

事件(什么时机做相应的操作)

获取页面元素

根据id获取元素

var div = document.getElementById('main');

console.log(div);

// 获取到的数据类型 HTMLDivElement,对象都是有类型的

// HTMLDivElement

根据标签名获取元素

var divs = document.getElementsByTagName('div');

for (var i = 0; i

var div = divs[i];

console.log(div);

}

根据name获取元素*

var inputs = document.getElementsByName('hobby');

for (var i = 0; i

var input = inputs[i];

console.log(input);

}

根据类名获取元素

var mains = document.getElementsByClassName('main');

for (var i = 0; i

var main = mains[i];

console.log(main);

}

根据选择器获取元素

var text = document.querySelector('#text');

console.log(text);

var boxes = document.querySelectorAll('.box');

for (var i = 0; i

var box = boxes[i];

console.log(box);

}

总结

掌握

getElementById()

getElementsByTagName()

了解

getElementsByName()

getElementsByClassName()

querySelector()

querySelectorAll()

事件

事件:触发-响应机制

Event接口表示在DOM中发生的任何事件,一些是用户生成的(例如鼠标或键盘事件),而其他由API生成。

事件三要素

事件源:触发(被)事件的元素

事件类型:事件的触发方式(例如鼠标点击或键盘点击)

事件处理程序:事件触发后要执行的代码(函数形式)

事件的基本使用

var box = document.getElementById('box');

box.onclick = function() {

console.log('代码会在box被点击后执行');

};

属性操作

非表单元素的属性

href、title、id、src、className

var link = document.getElementById('link');

console.log(link.href);

console.log(link.title);

var pic = document.getElementById('pic');

console.log(pic.src);

innerHTML和innerText

var box = document.getElementById('box');

box.innerHTML = '我是文本

我会生成为标签

';

console.log(box.innerHTML);

box.innerText = '我是文本

我不会生成为标签

';

console.log(box.innerText);

HTML转义符

" "

‘ '

& &

<

> // greater than 大于

空格

© ©

表单元素属性

value 用于大部分表单元素的内容获取(option除外)

type 可以获取input标签的类型(输入框或复选框等)

disabled 禁用属性

checked 复选框选中属性

selected 下拉菜单选中属性

自定义属性操作

getAttribute() 获取标签行内属性

setAttribute() 设置标签行内属性

removeAttribute() 移除标签行内属性

与element.属性的区别: 上述三个方法用于获取任意的行内属性。

样式操作

var box &#61; document.getElementById(&#39;box&#39;);

box.style.width &#61; &#39;100px&#39;;

box.style.height &#61; &#39;100px&#39;;

box.style.backgroundColor &#61; &#39;red&#39;;

类名操作

var box &#61; document.getElementById(&#39;box&#39;);

box.className &#61; &#39;clearfix&#39;;

创建元素的三种方式

document.write()

document.write(&#39;新设置的内容

标签也可以生成

&#39;);

innerHTML

var box &#61; document.getElementById(&#39;box&#39;);

box.innerHTML &#61; &#39;新内容

新标签

&#39;;

document.createElement()

var div &#61; document.createElement(&#39;div&#39;);

document.body.appendChild(div);

性能问题

innerHTML方法由于会对字符串进行解析&#xff0c;需要避免在循环内多次使用。

可以借助字符串或数组的方式进行替换&#xff0c;再设置给innerHTML

优化后与document.createElement性能相近

节点操作

var body &#61; document.body;

var div &#61; document.createElement(&#39;div&#39;);

body.appendChild(div);

var firstEle &#61; body.children[0];

body.insertBefore(div,firstEle);

body.removeChild(firstEle);

var text &#61; document.createElement(&#39;p&#39;);

body.replaceChild(text, div);

节点层级

重点讲父子属性&#xff0c;兄弟属性画图讲解

var box &#61; document.getElementById(&#39;box&#39;);

console.log(box.parentNode);

console.log(box.childNodes);

console.log(box.children);

console.log(box.nextSibling);

console.log(box.previousSibling);

console.log(box.firstChild);

console.log(box.lastChild);

注意

childNodes和children的区别&#xff0c;childNodes获取的是子节点&#xff0c;children获取的是子元素

nextSibling和previousSibling获取的是节点&#xff0c;获取元素对应的属性是nextElementSibling和previousElementSibling获取的是元素

nextElementSibling和previousElementSibling有兼容性问题&#xff0c;IE9以后才支持

总结

节点操作&#xff0c;方法

appendChild()

insertBefore()

removeChild()

replaceChild()

节点层次&#xff0c;属性

parentNode

childNodes

children

nextSibling/previousSibling

firstChild/lastChild

事件详解

注册/移除事件的三种方式

var box &#61; document.getElementById(&#39;box&#39;);

box.onclick &#61; function () {

console.log(&#39;点击后执行&#39;);

};

box.onclick &#61; null;

box.addEventListener(&#39;click&#39;, eventCode, false);

box.removeEventListener(&#39;click&#39;, eventCode, false);

box.attachEvent(&#39;onclick&#39;, eventCode);

box.detachEvent(&#39;onclick&#39;, eventCode);

function eventCode() {

console.log(&#39;点击后执行&#39;);

}

事件的三个阶段

捕获阶段

当前目标阶段

冒泡阶段

事件对象.eventPhase属性可以查看事件触发时所处的阶段

事件对象的属性和方法

event.type 获取事件类型

clientX/clientY 所有浏览器都支持&#xff0c;窗口位置

pageX/pageY IE8以前不支持&#xff0c;页面位置

event.target || event.srcElement 用于获取触发事件的元素

event.preventDefault() 取消默认行为

阻止事件传播的方式

标准方式 event.stopPropagation();

IE低版本 event.cancelBubble &#61; true; 标准中已废弃

常用的鼠标和键盘事件

onmouseup 鼠标按键放开时触发

onmousedown 鼠标按键按下触发

onmousemove 鼠标移动触发

onkeyup 键盘按键按下触发

onkeydown 键盘按键抬起触发



推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 解决.net项目中未注册“microsoft.ACE.oledb.12.0”提供程序的方法
    在开发.net项目中,通过microsoft.ACE.oledb读取excel文件信息时,报错“未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序”。本文提供了解决这个问题的方法,包括错误描述和代码示例。通过注册提供程序和修改连接字符串,可以成功读取excel文件信息。 ... [详细]
author-avatar
mobiledu2502940947
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有