独立开发者系列(18)——js的window对象

news2024/9/22 7:01:04

独立开发者,必然要面对JS代码,基本可以认为在脚本语言里面,JS门槛最低,正因为如此,JS也是最受欢迎的开发语言之一。JS的代码运行规律,按照代码模块执行,也就是<script></script> 每次读取到一个模块的时候,加载到分析后,运行一次,所以在同一个标签里面,函数可以放在执行的后面,但是如果在另外一个模块里面,函数一定要出现优先执行顺序,除非通过其他属性改变这种顺序。

  由于JS大部分时候都是操作对象,比如操作window对象,我们开发的时候,如果功能比较多,最好也有对象的方式开发,使用的时候,直接demo.test 这种方式使用,会让程序看上去简化不少。
  这里主要总结JSwindows的对象和使用场景,方便快速反应和实现特定效果。Window对象,其实就是浏览器窗口,很多操作都是对窗口的操作。
场景一: 我需要将整个页面完全加载完成,然后才能操作,防止里面有些代码未加载,代码就直接开始执行,其实就是Jquery的预加载方法,JS和其他代码运行逻辑不通,他是先读到某个代码块,就开始执行代码块的,这样,如果JS写在head里面,会导致无法操作后面的对象,所以需要window.onload=function(){} 加载后执行代码。从其他程序转过来开发的时候,经常会因为代码放置的顺序,导致程序出现意想不到的BUG。

场景二:我需要进行一个判断当前浏览器是否符合我指定的要求,否则就跳出去。非常经常的应用,有些页面不能再微信里面打开,因为微信会严重限制我们本身的JS能力。window.navigator: 提供了关于浏览器的信息,如 navigator.userAgent 可以获取浏览器的版本信息。,读取浏览器的版本信息,用户微信里面打开,就可以获取该参数,然后直接拦截掉。

示例判断是不是微信浏览器:

      function isWeiXin() {

        var ua = window.navigator.userAgent.toLowerCase();

            //通过正则表达式匹配ua中是否含有MicroMessenger字符串

            if (ua.match(/MicroMessenger/i) == 'micromessenger') {

                return true;

            } else {

                return false;

            }

        }

如果判断是在微信浏览器里面,就开始做微信浏览器内部的操作。 手机端浏览器的判断:

function detectBrowser() {

  const userAgent = navigator.userAgent;

  if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent)) {

    return 'Mobile';

  } else {

    return 'Desktop';

  }

}

const browserType = detectBrowser();

console.log(`当前浏览器类型: ${browserType}`);

获取当前的地理定位,由于geo的API接入,浏览器具备了获取地理定位能力。HTML5提供了Geolocation API,允许网页在用户授权的情况下访问设备的地理位置信息。Geolocation API可以结合GPS、Wi-Fi。

navigator.geolocation.getCurrentPosition(showPosition, showError); 获取当前位置的实现

function showPosition(position) {

  const latitude = position.coords.latitude;

  const longitude = position.coords.longitude;

  console.log(`Latitude: ${latitude}, Longitude: ${longitude}`);

  // 在这里可以根据经纬度做进一步处理,如在地图上显示位置等

}

//失败

function showError(error) {

  switch(error.code) {

    case error.PERMISSION_DENIED:

      alert("User denied the request for Geolocation.");

      break;

    case error.POSITION_UNAVAILABLE:

      alert("Location information is unavailable.");

      break;

    case error.TIMEOUT:

      alert("The request to get user location timed out.");

      break;

    default:

      alert("An unknown error occurred.");

      break;

  }

}

场景四:我们获取访问的链接是否合法,或者是否被串改,类似很多邮件的认证链接。url?auth=XXXXXXXXXXXXXXXXX,如果链接被中途修改,或者写错,只写了url,没有获取到auth参数,直接跳到我们指定的页面。var queryString = window.location.search; //读取链接里面?后面的参数。window.location.href = tiaozhuanURL; 跳转到的URL,也用于当一些非法页面访问或者错误页面,访问三秒之后跳转到主页等场景。window.location.origin(属性返回当前 URL 的源(协议 + 域名 + 端口)。它是由协议、主机名和端口号组成的字符串,不包括路径或查询字符串)

一个XSS的经典实现,执行某个window.location.href ,跳转到指定的URL(遥控的URL,该URL携带了跳过来的网址并写入了cookie信息)这样就能实现进入被攻击者后台目的。

场景五:window的socket对象,实现socket编程。Socket实现长链接。聊天室/交易所/游戏,经常使用到的技术

​ Web Socket(套接字)的目标是通过一个长时连接实现与服务器全双工、双向的通信。在 JavaScript 中创建 Web Socket 时,一个 HTTP 请求会发送到服务器以初始化连接。服务器响应后,连接使用 HTTP 的 Upgrade 头部从 HTTP 协议切换到 Web Socket 协议。这意味着 Web Socket 不能通过标准 HTTP 服务器实现,而必须使用支持该协议的专有服务器。因为 Web Socket 使用了自定义协议,所以 URL方案(scheme)稍有变化:不能再使用 http://或 https://, 而要使用 ws://和 wss://。前者是不安全的连接,后者是安全连接。在指定 Web Socket URL 时,必须包含 URL 方案,因为将来有可能再支持其他方案。使用自定义协议而非 HTTP 协议的好处是,客户端与服务器之间可以发送非常少的数据,不会对 HTTP 造成任何负担。使用更小的数据包让 Web Socket 非常适合带宽和延迟问题比较明显的移动应用。 使用自定义协议的缺点是,定义协议的时间比定义 JavaScript API 要长。Web Socket 得到了所有主流浏览器支持。Web Socket 是与服务器的全双工、双向通信渠道。与其他方案不同,Web Socket 不使用 HTTP,而使用了自定义协议,目的是更快地发送小数据块。这需要专用的服务器,但速度优势明显。
 实现代码:


const socket = new WebSocket('wss://example.com/socket');
//打开
socket.onopen = function(event) {
  console.log('连接打开:', event);
};
//发送
socket.send('你好,服务器!');
//接收消息
socket.onmessage = function(event) {
  console.log('收到消息:', event.data);
};
//关闭
socket.onerror = function(error) {
  console.error('连接错误:', error);


 

其他场景: window.setInterval() 定时运行某个函数   倒计时不断,基本倒计时会用到该函数

当前当前窗口的前一页和后一页,就是我们平时最常用的,后退或者前进history.go()

弹框报错提示,alert 直接弹框,默认我们使用的alert就是window对象的弹框,我们最常用的打印console.log() 也是属于window对象。

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

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

相关文章

node版本控制工具nvm,让你不用再重装node来更新版本。

引言 由于项目的nodejs版本不一致&#xff0c;导致需要卸载安装换版本&#xff0c;十分麻烦&#xff0c;使用nvm node版本控制器来快速切换node版本 下载安装 先把你原来的node安装目录删掉 github下载nvm-setup.zip。傻瓜式安装 Releases coreybutler/nvm-windows (gith…

宝塔Linux面板配置环境 + 创建站点

一、安装 &#xff08;1&#xff09;进入宝塔官网 https://www.bt.cn/new/index.html &#xff08;2&#xff09;点击“ 立即免费安装 ”&#xff0c;选择 Centos安装脚本 &#xff08;3&#xff09;进入 ssh 输入以下命令安装宝塔 yum install -y wget && wget -O …

【论文解读】CVPR2024:DUSt3R: Geometric 3D Vision Made Easy

论文“”https://openaccess.thecvf.com/content/CVPR2024/papers/Wang_DUSt3R_Geometric_3D_Vision_Made_Easy_CVPR_2024_paper.pdf 代码&#xff1a;GitHub - naver/dust3r: DUSt3R: Geometric 3D Vision Made Easy DUSt3R是一种旨在简化几何3D视觉任务的新框架。作者着重于…

错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 python ping

报错提示&#xff1a;错误 [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试 用python做了一个批量ping脚本&#xff0c;在windows专业版上没问题&#xff0c;但是到了windows服务器就出现这个报错 解决方法&#xff1a;右键 管理员身份运行 这个脚本 …

电子工程与网络技术解析

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 1、MUX&PD是什么意思 2、Hub 和HUB有什么区别 3、Redriver什么意思 4、Switch是什么意思 5、USB 2.0 ETHERNET2什么意思 6、…

Ubuntu18.04新安装--无网络连接、重启黑屏解决教程

一、安装Ubuntu Ubuntu安装需要U盘作为启动盘&#xff0c;在目前教新的电脑中选中GPT作为分区&#xff0c;制作启动盘&#xff0c;其中在安装双系统Ubuntu时&#xff0c;以自定义格式作为存储空间。详细安装过程以以及如何分区请参考下列链接&#xff1a;内含详细安装过程&…

教育场景中的自动化分拣系统!基于大象机器人UltraArm P340机械臂和传送带的实现

引言 今天我们将展示一个高度自动化的模拟场景&#xff0c;展示多个机械臂与传送带协同工作的高效分拣系统。在这个场景中&#xff0c;机械臂通过视觉识别技术对物体进行分类&#xff0c;并通过精确的机械操作将它们放置在指定的位置。这一系统不仅提高了分拣的速度和准确性&am…

Vue el-table列合并

1.封装公用方法 const dataMethod (data, isH []) > {let spanObj {}; // 存储每个key 对应的合并值let pos {}; // 存储的是 key合并值得索引// 循环数据for (let i 0; i < data.length; i) {let dataI data[i];// 循环数据内对象&#xff0c;查看有多少keyfor (…

使用U盘重装系统

目录 一、 制作启动盘 1. 准备一个U盘和一台电脑 2. 下载win10安装包 二、安装操作系统 1. 插入系统安装盘 2. 通过进入BIOS界面进入到我们自己制作的启动盘上 三、安装成功后进行常规设置 一、 制作启动盘 1. 准备一个U盘和一台电脑 注意&#xff1a;提前备份好U盘内的…

九浅一深Jemalloc5.3.0 -- ⑧浅*free

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但最新版本5.3.0却少之又少。而且5.3.0的架构与5之前的版本有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析最新release版本Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是…

PyTorch环境配置及安装

PyTorch环境配置及安装 Step1&#xff1a;安装Anaconda 参考该链接&#xff08;视频01:30--03:00为安装教程&#xff09;&#xff1a; 【PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】】 https://www.bilibili.com/video/BV1hE41…

04通俗理解自注意力机制(self-attention)

04浅谈自注意力机制&#xff08;self-attention&#xff09; 1. 基本概念 注意力机制 是Transformer模型的核心。它的作用是让模型能够“关注”输入数据的不同部分&#xff0c;而不是一次只处理一个词。比如&#xff0c;当模型在处理一句话时&#xff0c;它可以同时考虑句子中…

AntV学习笔记

文章目录 G6 图可视化引擎简单上手复杂一点的案例 S2 多维交叉分析表格简单的一个vue3使用S2的例子 G6 图可视化引擎 G6 是一个简单、易用、完备的图可视化引擎&#xff0c;它在高定制能力的基础上&#xff0c;提供了一系列设计优雅、便于使用的图可视化解决方案。能帮助开发者…

【数据集】最近开源的一些多模态图表理解数据集

1. CharXiv 现有数据集通常关注过于简化和同质化的图表&#xff0c;并且问题往往基于模板生成&#xff0c;这导致了对MLLMs图表理解能力的过度乐观评估。为了解决这个问题&#xff0c;作者提出了一个新的评估套件CharXiv&#xff0c;它包含了从arXiv论文中精选的2323个自然、具…

昇思25天学习打卡营第10天|linchenfengxue

基于MobileNetv2的垃圾分类 通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 MobileNetv2模型原理介绍 MobileNet网络是由Google团队于2017年提出的专注于移动端、嵌入式或IoT设备的轻量级CNN网络&#x…

【产品运营】Saas的核心六大数据

国内头部软件公司的一季度表现惨不忍睹&#xff0c;为啥美国的还那么赚钱呢&#xff1f;其实核心是&#xff0c;没几个Saas产品经理是看数据的&#xff0c;也不知道看啥数据。 SaaS 行业&#xff0c;天天抛头露面、名头叫的响的 SaaS 产品&#xff0c;真没有几个赚钱的。 那为…

# mysql 中文乱码问题分析

mysql 中文乱码问题分析 一、问题分析&#xff1a; MySQL 中文乱码通常是因为字符集设置不正确导致的。MySQL 有多种字符集&#xff0c;如 latin1、utf8、utf8mb4 等&#xff0c;如果在创建数据库、数据表或者字段时没有指定正确的字符集&#xff0c;或者在插入数据时使用了与…

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下&#xff1a; 要使用这个脚本&#xff0c;请按照以下步骤操作&#xff1a; 打开Excel&#xff0c;然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中&#xff0c;选择“插入” > “模块”&#xff0c;在打开的模块…

C语言课设--读取文件并统计数据

读取文件并统计数据 // 统计记事本英文字符数 //功能 &#xff1a; 读 文件 a.txt 统计出各种 数字 大写字母 小写字母 0~9 A~Z a ~z各有多少个 程序主体框架如下&#xff1a; #include<stdio.h> int a[128]{0};//其中数组元素a[i]保存 ASCII 码为i的字符的数量 v…

安装Intel Realsense D435i驱动与ROS包报错

1.下载安装realsense SDK 1.1 安装依赖 sudo apt install libudev-dev pkg-config libgtk-3-dev sudo apt install libusb-1.0-0-dev pkg-config sudo apt install libglfw3-dev sudo apt install libssl-dev1.2 权限 cd librealsense/ sudo cp config/99-realsense-libusb.…