✽js的快速入门5 window对象

2023-09-19 12:46:23

BOM浏览器对象模型:是规范浏览器对js语言的支持(js调用浏览器本身功能)

    BOM的具体实现是window对象

window对象使用

1. 不用new直接进行使用即可,类似Math的使用方式,window关键字可以省略不写

        window.document等等

2. 框体方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>windows</title>
    <script>
        var a;
        function warn(){
            a=window.alert('警告框');
            console.log(a);
        }
        function sure(){
            a=window.confirm('你确认吗?');
            console.log(a);
        }
        function prompt1(){
            a=window.prompt('请输入你的昵称');
            console.log(a);
        }
    </script>
</head>
<body>
    <!-- 1. 框体方法 -->
    <button onclick="warn();">警告框</button>
    <button onclick="sure();">确认框</button>
    <button onclick="prompt1();">提示框</button>
</body>
</html>

确认框返回[确认true,取消false]

提示框返回[啥也不写返回'',取消返回null,输入内容返回内容]

  3. 定时和间隔执行方法

setTimeout(操作,时间);

setInterval(操作,间隔时间);

将set改为clear就变成了清除

    <script>
        var id,id2;
        function testsettime(){
            id=window.setTimeout(function(){
                alert('3秒到了');
            },3000);
        }
        function testinterval(){
            id2=window.setInterval(function(){
                console.log('隔1秒执行');
            },1000);
        }
        function testcleartimeout(){
            window.clearTimeout(id);
        }
        function testclearinterval(){
            window.clearInterval(id2);
        }
    </script>    
    <!-- 2. 定时和间隔执行方法 -->
    <button onclick="testsettime()">倒计时 3秒</button>
    <button onclick="testinterval()">间隔1秒</button>
    <button onclick="testcleartimeout()">停止计时器</button><!-- 阻止了倒计时的函数 -->
    <button onclick="testclearinterval()">停止间隔</button><!-- 从间隔弹出 -->

  4. 子窗口方法

 1》子窗口使用 window.opener.postMessage() 方法,父窗口使用window.addEventListener来监听

先看几个这浏览器页面的跳转与设置

// 地址栏属性[window.location.href, window.location.reload();]
        function testLocation(){
            window.location.href='http://www.baidu.com';//js操作,动态修改页面信息,跳转至该页面
        }
        function testLocation2(){
            window.location.reload();// 重新加载资源
        }
        // 历史记录【window.history.forward();,window.history.back();,window.history.go(index);】go0为刷新,
        function testHistory(){
            window.history.forward();
        }
        // 屏幕占比
        function testScreen(){
            var x=window.screen.width;//分辨率
            var y=window.screen.height;
            alert(x+':'+y);
        }
        // 浏览器配置属性
        function testNa(){
            alert(window.navigator.userAgent);
        }
 <input type="button" value="test地址栏" onclick="testLocation()">
    <input type="button" value="test地址栏" onclick="testLocation2()">
    <input type="button" value="历史记录前进" onclick="testHistory()">
    <input type="button" value="屏幕长宽" onclick="testScreen()">
    <input type="button" value="屏幕配置" onclick="testNa()">

 父窗口,使用监听器进行监听

<script>
        window.addEventListener('message', function(event) {
            console.log('Received message from child window:', event.data);
        });
        function testopen(){
            //打开一个新窗口
            // window.open();
            /* window.open('js1.html','newwindow','height=200,width=600,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizeble=no,location=no,status=no');
                                 页面,打开方式,'配置(子窗口的高,宽,距顶,距左,工具栏,菜单栏,滚动条,大小是否可变,地址栏,状态栏)'
            */
            window.open('被打开子窗口.html','newwindow','height=200,width=600,top=200,left=320,toolbar=no,menubar=yes,scrollbars=no,resizeble=no,location=no,status=yes'); 
        }
</script>
<button onclick="testopen()">打开新标签页</button>

子窗口中携带了一个案例【几秒钟后关闭】【打开父页面的控制台即可看到】

<script>
    function clc(){
        window.opener.postMessage('Hello from child window!', '*');
        }
    function testclose(){
            window.setInterval(function(){
                var span=document.getElementById('testspan');
                span.innerHTML=span.innerHTML-1;
                if(span.innerHTML == 0){
                    window.close();//只能关闭由window打开的页面
                }
            },1000);
        }
        function testc(){
            window.close();
        }
</script>
<body onload="testclose()">
    <p>该页面<span style="color: brown;" id="testspan">60</span>秒后关闭</p>
    <button onclick="testc();">关闭子页面</button>
    <button onclick="clc();">发往父页面</button>
</body>

        在上面的代码中,子窗口使用 window.opener.postMessage() 方法向父窗口发送消息。postMessage 方法的第一个参数是要发送的消息内容,第二个参数是目标窗口的原点,使用 '*' 表示可以向任意源发送消息。

        在父窗口中,我们使用 window.addEventListener() 方法来监听 message 事件,当子窗口发送消息时,就会触发该事件的处理程序。在处理程序中,我们可以通过 event.data 属性获取到子窗口发送的消息内容。

2》使子窗口与父窗口同源【域名相同,即发到服务器上,在自己本机做不到】

要实现第二种方法,将父窗口和子窗口设置为相同的域(同源),您可以遵循以下步骤:

        将父窗口和子窗口的 HTML 文件放置在同一个域(同一个域名、协议和端口)下。例如,将它们都放置在http://example.com域下。

        通过域名访问父窗口和子窗口的 HTML 文件。确保父窗口和子窗口的 URL 地址的域名部分相同。

         确保父窗口和子窗口的协议和端口也相同。例如,父窗口是通过http://example.com访问的,则子窗口也应该通过http://example.com访问而不是https://example.com。

        在父窗口和子窗口之间的通信上使用 window 对象的属性和方法,例如 window.opener 。

        请注意,如果您的父窗口和子窗口由不同的应用程序或服务提供,您可能需要进行相应的配置和设置。具体的步骤和操作方式可能因您使用的服务器或应用程序框架而有所不同。

        值得注意的是,如果您正在使用的是本地文件系统(file://),则无法直接通过改变域来避免跨域问题。您可以尝试使用本地服务器来提供您的应用程序,例如使用 Node.js 的 http-server 包或其他类似的工具。

        请确保在实施任何更改之前备份您的代码,并且仅在您了解安全风险并且在可信环境中进行这些更改。

下节是一些案例

更多推荐

Kafka实现高性能消息队列分析

ApacheKafka是一款开源的、分布式的、高吞吐量的流平台。它被广泛用于实时数据流的处理,包括实时流分析、实时日志处理、实时事件处理等。Kafka的主要设计目标是高吞吐量、可扩展性、容错性和持久性。在本篇文章中,我们将深入探讨Kafka如何实现高性能消息队列,包括服务端和客户端的架构,以及关键的设计和优化技术,如服

Kafka概论

前言任何消息中间件,除了基础组件架构外,核心特性无非三个,消息可靠性、消息模型、吞吐量,本文要聊的正是这些东西,其余诸如API、下载安装、集群搭建等都是死的,而且会随着版本的变动而改变,这类东西针对不同版本,查官方文档即可。目录前言1.概述1.1.特点1.2.架构2.消息模型2.1.发布订阅模式2.2.点对点2.3.消

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发

Java版工程项目管理系统SpringCloud+SpringBoot+Mybatis+Vue+ElementUI+前后端分离功能清单如下:首页工作台:待办工作、消息通知、预警信息,点击可进入相应的列表项目进度图表:选择(总体或单个)项目显示1、项目进度图表2、项目信息施工地图:1、展示当前角色权限下能看到的施工地图(

从统计语言模型到预训练语言模型---统计语言模型

语言模型从历史上来看,自然语言处理的研究范式变化是从规则到统计,从统计机器学习到基于神经网络的深度学习,这同时也是语言模型发展的历史。要了解语言模型的发展历史,首先我们需要认识什么是语言模型。语言模型的目标是建模自然语言的概率分布,即确定语言中任意词序列的概率,它提供了从概率统计角度建模语言文字的独特视角。语言模型在自

uniapp——实现电子签名功能——基础积累

话说,2020年刚来杭州的时候,有用到过uniapp,距今已有三年时间了,果然全忘了,哈哈[笑中带泪]昨天遇到一个需求:就是要实现pdf文件的预览,着实费了我很多的时间,连晚饭都没有吃好。。。这里写目录标题`先写一个小的功能点记录:文档预览功能的实现`——`openDocument``放弃web-view``放弃ifr

MySQL进阶篇2-索引的创建和使用

索引mkdirmysqltar-xvfmysqlxxxxx.tar-cmyqlcdmysqlrpm-ivh.....rpmyuminstallopenssl-develsystemctlstartmysqldgerp'temporarypassword'/var/log/mysqld.logmysql-uroot-pm

Python 06 之面向对象基础

😀前言在日常编程和软件开发中,我们通常会遇到各种各样的问题,其中很多问题都可以通过面向对象的程序设计方法来解决。面向对象编程不仅可以使代码更加组织化和系统化,而且还可以提高代码的重用性和可维护性。.在本教程中,我们将探索Python语言中面向对象编程的基本概念。我们将从最基本的类和对象的定义开始,然后深入探讨类的属性

【python百炼成魔】python之字典详解

前言今天我们一起来探讨python的另外一种类型:字典,如果你没有看过列表和元组,建议先学习列表和元组。【python百炼成魔】python之元组详解【python百炼成魔】python之列表详解文章目录前言字典的概念语法格式及字典的创建字典的日常操作1.获取字典的值2.获取字典视图的三个方法3.增加元素,修改元素,删

基于Java在线教学质量评价系统设计实现(源码+lw+部署文档+讲解等)

博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌🍅文末获取源码联系🍅👇🏻精彩专栏推荐订阅👇🏻不然下次找不到哟2022-2024年最全的计算机软件毕业设计选题

典型数据结构-栈/队列/链表、哈希查找、二叉树(BT)、线索二叉树、二叉排序树(BST树)、平衡二叉树(AVL树)、红黑树(RB树)

目录典型数据结构列举栈/队列/链表树二叉树线索二叉树二叉排序树平衡二叉树(AVL树)红黑树其它树种和应用介绍典型数据结构列举栈/队列/链表描述略。一些基本的简单实现参考/数据结构简单实现/文件夹里面。线性表详解:数据结构线性表10分钟入门(biancheng.net)。栈(Stack)和队列(Queue)详解(bian

EMQX Enterprise 5.2 发布:Flow 设计器,Amazon Kinesis,Azure Event Hubs

EMQXEnterprise5.2.0版本现已正式发布!新版本带来了一系列重磅更新,最令人瞩目的是可拖拽的可视化Flow设计器,它可以帮助企业快速创建、测试和部署数据集成。同时,我们新增了对AmazonKinesis和AzureEventHubs的支持,实现了海量物联网设备数据与云服务的无缝连接。此外,新版本还进行了多

热文推荐