当前位置: 首页 > 编程日记 > 正文

Javascript学习7 - 脚本化浏览器窗口

原文:Javascript学习7 - 脚本化浏览器窗口

本节讨论了文档对象模型、客户端Javascript下Window中的各项属性,包括计时器、Location对象、Histroy对象、窗口、浏览器等相关属性的讨论。

    具体详细Window属性介绍可以参见:http://www.w3school.com.cn/htmldom/dom_obj_window.asp
    7.1 浏览器环境
        在客户端Javascript中,表示HTML文档的是Document对象,Window对象代表显示该文档的窗口。
        Window对象是客户端编程中的全局对象。Javascript每一个实现都有一个全局对象,对象位于作用链的头部。这个全局对象的属性也就是全局变量。客户端Javascript的Window对象是全局对象,它定义了大量的属性和方法,使用户可以对浏览器的窗口进行操作。
        它定义了引用其它重要对象的属性,如Document对象的document属性,Screen对象的screen属性。。。
        它还有两个自我引用属性:window和self,可以使用这两个变量来引用Window自身。
        一个详细的客户端对象层次和文档对象模型(DOM)图见图13-1



    7.2 文档对象模型(DOM)简介
        Window对象是客户端Javscript中的一个关键对象,其它所有的客户端对象都通过这个对象访问。
        Window对象定义了一个document属性,该属性引用与这个窗口关联在一起的Document对象。
        location属性引用与窗口关联在一起的Location对象。
        如果Web浏览器是一个带帧的文档,则顶层的Window对象的frames[]数组包含了对代表帧的Window对象的引用。
            (window.)frames[1].document  -> 引用的是当前窗口第二个子帧的Document对象。
            (window.)document.forms[0]   -> 访问当前页面的第一个Form表单
            parent.frames[0].document.forms[0].elements[3].options[2].text  -> 当前文档第一个Form表单第四个输入域第三个选项的值。

    7.3 计时器
        Javascript提供了全局函数setTimeout() / clearTimeout() / setInterval() / clearInterval()来进行指定时间的函数调用。
        setTimeout() : 安排一个函数在指定的毫秒过去后运行。
        clearTimeout() : 取消setTimeout()指定函数的执行。
        setInterval() : 安排一个函数在一个指定的毫秒间隔内重复的调用。
        clearInterval() : 取消setInterval()函数的执行。

    7.4 Location对象
        窗口的location属性引用的就是Location对象,它代表窗口中当前显示的文档URL
        ● location.href属性
        Location对象的href属性是一个字符串,表示的是URL的完整文本,因为Location对象的toString()方法返回的就是href属性的值,所以,也可以直接使用location表示location.href
        ● location.search属性
        search属性包含的是URL中?之后的那部分URL,通常是某种类型的查询字符串。
        以下代码通过getArgs来获得URL后?后各个节。

 1ExpandedBlockStart.gifContractedBlock.giffunction getArgs( ) {
 2    var args = new Object( );
 3    var query = location.search.substring(1);     // Get query string
 4    var pairs = query.split("&");                 // Break at ampersand
 5ExpandedSubBlockStart.gifContractedSubBlock.gif    for(var i = 0; i < pairs.length; i++{
 6        var pos = pairs[i].indexOf('=');          // Look for "name=value"
 7        if (pos == -1continue;                  // If not found, skip
 8        var argname = pairs[i].substring(0,pos);  // Extract the name
 9        var value = pairs[i].substring(pos+1);    // Extract the value
10        value = decodeURIComponent(value);        // Decode it, if needed
11        args[argname] = value;                    // Store as a property
12    }

13    return args;                                  // Return the object
14}

        ● 载入新文档
        可以给location属性赋值一个字符串,浏览器会把它解释为一个URL,并且试图用这个URL载入和显示文档。
        if (!document.getElementById)
            location = "staticpage.html";

        ★ 最后,要注意不要混淆Window对象的location属性和document中的location属性。前者是一个Location对象,后者只是一个只读字符串,并不具有Location对象的任何特性。document.location与document.href是同义的。★

    7.5 History对象
        Window对象的history属性是该窗口的History对象。另外注意的是:脚本不能像数组一样访问history属性中的元素
        History对象支持三种属性:back() / forward() / go()
        ● back()和forward()属性 :在窗口中向前后移动,与用户点击浏览器的Back和Forward按钮的作用相同。
        ● go() :使用一个整型参数,在历史列表中向前(正参数)或向后(负参数)跳过多少页。

    7.6 窗口、屏幕和浏览器信息
        ●获得窗口的大小/屏幕和浏览器信息的相关代码如下所示:
          
 1// 浏览器在桌面上的窗口大小
 2            var windowWidth = window.outerWidth;   
 3            var windowHeight = window.outerHeight;
 4
 5// This is the position of the browser window on the desktop 浏览器在桌面上的超始位置
 6var windowX = window.screenX   // for IE is : window.screenLeft
 7var windowY = window.screenY   // for IE is : window.screenTop
 8
 9// The size of the viewport in which the HTML document is displayed
10// This is the window size minus the menu bars, toolbars, scrollbars, etc.
11// 只读属性,声明了窗口的文档显示区的高度和宽度,以像素计。这里的宽度和高度不包括菜单栏、工具栏以及滚动条等的高度。
12var viewportWidth = window.innerWidth;     // for IE is : document.documentElement.clientWidth
13var viewportHeight = window.innerHeight;   // for IE is : document.documentElement.clientHeight;
14// These values specify the horizontal and vertical scrollbar positions.
15// They are used to convert between document coordinates and window coordinates.
16// These values specify what part of the document appears in the
17// upper-left corner of the screen.
18// 设置或返回当前页面相对于窗口显示区左上角的 X 位置/Y 位置
19var horizontalScroll = window.pageXOffset;  // for IE is : document.documentElement.scrollLeft
20var verticalScroll = window.pageYOffset;    // for IE is : document.documentElement.scrollTop

           注:以上属性,对于在Window IE6中并没有定义,Windows定义的相关属性在后面注释中已经写出来了。

    7.7 Screen对象
        Screen提供了有关用户显示器的大小和可用颜色数量的信息。有以下属性:
        width/height : 以像素为单位的显示器大小。
        availWidth/availHeight: 实际可用的显示大小。
        availLeft/availTop : 屏幕上第一个可用位置的坐标(不适合IE)

    7.8 Navigator对象
        Navigateor对象提供了Web浏览器的总体信息。经常通过它用来区分在哪个浏览器中运行。
        ● 它有以下五个属性:
        appName     :   Web浏览器的简单名称
        appVersion  :   Web浏览器的版本号
        userAgent   :   浏览器在它的USER-AGENT HTTP头部中发送的字符串。
        appCodeName :   浏览器的代码名
        platform    :   运行浏览器的平台
        →以下代码在一个对话框中显示了Navigator对象的每个属性:
1var browser = "BROWSER INFORMATION:\n";
2ExpandedBlockStart.gifContractedBlock.giffor(var propname in navigator) {
3   browser += propname + "" + navigator[propname] + "\n"
4}

        alert(browser);
        →以下代码用来确定浏览器和厂商版本:
1ExpandedBlockStart.gifContractedBlock.gifvar browser = {
2    version: parseInt(navigator.appVersion),
3    isNetscape: navigator.appName.indexOf("Netscape"!= -1,
4    isMicrosoft: navigator.appName.indexOf("Microsoft"!= -1
5}
;


    7.9 打开窗口和关闭窗口
        ● 打开窗口
            使用window.open方法可以打开一个新的浏览器窗口。大多数Web浏览器配备了某种弹出窗口阻止系统。
            ★ 一般的,只有当作为用户点击按钮或链接的响应的时候,调用open()方法才会成功。★
            windows.open调用需要四个参数。返回值是代表新打开窗口的window对象。
            参数1:新窗口中显示的文档URL ,如果参数为null或空字符串,新打开的窗口为空
            参数2:新窗口的名字,可以作为<a>标记或<form>标记的taget属性的值。
            参数3:特性列表,声明窗口大小及GUI装饰。如果省略,将使用默认大小,及具有一套标准的GUI特性。
            参数4:只在参数2命名的是一个已经存在的窗口时才有用,它是一个布尔值,表示参数1的URL是应该替换掉窗口浏览历史的当前项(true),还是在窗口浏览历史中创建一个新的项(false),后者是默认设置。
            打开窗口举例:
           
1var w = window.open("smallwin.html""smallwin",
2                    "width=400,height=350,status=yes,resizable=yes");

        ● 关闭窗口
            方法close将关闭一个窗口。如果已经创建了一个Window对象w,可以使用以下代码关闭:
                w.close();
            运行在被打开窗口中的JS代码可以使用以下代码关闭(关闭自身窗口)
                window.close();

    7.10 键盘焦点和可见性
        方法focus()和blur()提供了对窗口的高级控制。focus()会请求系统将键盘焦点赋于窗口,调用blur会放弃键盘焦点。
        在使用window.open()方法打开新窗口时,浏览器会自动在顶部创建窗口。但是如果它第二个参数指定的窗口名已经存在,open()方法不会自动使那个窗口可见,因此,调用open()后调用focus()很常用。
       
1var w = window.open("smallwin.html""smallwin",
2                    "width=400,height=350,status=yes,resizable=yes");
3w.focus();

    7.11 状态栏
        可以设置window.status属性来设置状态栏的显示。但是,现有的浏览器关闭了状态栏的status属性功能。
也可以使用window.defaultstatus属性,当浏览器没有任何其它东西(例如超链接URL)来显示的时候,会指定状态栏显示的文本。

相关文章:

ASP.Net 2.0 发送邮件的代码

这两天因为要做一个可以收集用户提交信息&#xff0c;然后发送邮件到指定邮箱的网页。在 asp.net 2.0 里面发送邮件可以使用 System.Net.Mail 下面的类。http://www.systemnetmail.com/faq/2.1.aspx 这个地址有 System.Net.Mail 的作者写的仿佛是 MSDN 类似的 Faq&#xff0c;看…

腾讯To B业务架构再升级,汤道生任云与智慧产业事业群CEO

5月14日&#xff0c;腾讯云与智慧产业事业群&#xff08;CSIG&#xff09;宣布新一轮架构升级&#xff0c;这是继2018年“930变革”后&#xff0c;腾讯To B业务的又一次重大进化。 在本轮战略升级中&#xff0c;腾讯公司高级执行副总裁汤道生担任云与智慧产业事业群CEO&#x…

一篇文章读懂阿里云负载均衡性能保障型实例

1. 什么是负载均衡性能保障型实例?2. 性能保障型实例如何收费&#xff1f;3. 性能保障型实例规格费的定价4. 如何选择性能保障型实例&#xff1f;5. 性能保障型实例的变配操作限制6. 性能保障型实例何时收费&#xff1f;7. 收费后性能共享型实例会收费吗&#xff1f;8. 为何有…

POJ 2135 Farm Tour 最小费用流

两条路不能有重边&#xff0c;既每条边的容量是1。求流量为2的最小费用即可。 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostre…

Linux动态库和静态库比较

Linux动态库和静态库比较文件预览 文件目录树如下&#xff0c;如你所见&#xff0c;非常简单。 1. libtest/ 2. |-- lt.c 3. |-- lt.h 4. -- test.c #lt.c 1. 4. 5. #include 6. 7. void myprint(void) 8. { 9. printf("Linux librar…

“一键”部署分布式训练,微软“群策MARO”上新集群管理助手

作者 | 李开琪、王金予 编者按&#xff1a;2020年&#xff0c;微软亚洲研究院发布并开源了多智能体资源优化平台“群策MARO”。为了帮助不同需求的用户进行更加便捷、高效的集群管理&#xff0c;也希望用户可以方便快捷地部署分布式训练任务&#xff0c;微软亚洲研究院的研究员…

1968年12月9日,恩格尔巴特公开演示了世界上第一个鼠标盒子

鼠标之父”道格拉斯恩格尔巴特 腾讯科技讯&#xff0c;肖华2013年12月19日编译 计算机的几次革命和大规模普及都是始于人机交互的改变&#xff0c;今年7月2日&#xff0c;“鼠标之父”道格拉斯恩格尔巴特溘然辞世。人们才发现&#xff0c;他的发明远不止鼠标。作为人机交互的先…

GPT-3模型为何难以复现?这也许是分布式AI框架的最优设计

作者 | 成诚头图 | 下载于视觉中国2020 年&#xff0c;最轰动的 AI 新闻莫过于 OpenAI 发布的 GPT-3 了。它的1750亿参数量及其在众多NLP任务上超过人类的出众表现让大家坚信&#xff1a;大模型才是未来。但与之带来的问题是&#xff0c;训练超大模型所需的算力、存储已不再是单…

c#中什么情况下用(int)什么情况下用Convert.ToInt32

1.c#中什么情况下用(int)什么情况下用Convert.ToInt32 ? 比如说有一个string型的3 ,要给它转换成int型的是用(int)3 ,还是用Convert.ToInt32(3); 还是两个都可以用&#xff0c;为什么&#xff1f; 解答&#xff1a;这两个都是转换成整型的&#xff0c;只是它们的长度不同。…

困扰多日的C#调用Haskell问题竟然是Windows的一个坑

最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰&#xff08;详见C#调用haskell遭遇Attempted to read or write protected memory&#xff0c;C#调用haskell时的“尝试读取或写入受保护的内存”问题&#xff09;&#xff0c;而且困在其中&#xff0c;越…

“移花接木”偷换广告:HTTPS劫匪木马每天打劫200万次网络访问

本文讲的是“移花接木”偷换广告&#xff1a;HTTPS劫匪木马每天打劫200万次网络访问&#xff0c;近年来&#xff0c;国内各大网站逐渐升级为HTTPS加密连接&#xff0c;以防止网站内容被篡改、用户数据被监听。但是一向被认为“安全可靠”的HTTPS加密传输&#xff0c;其实也可以…

Oracle之sqlpluse显示格式

SQL> show linesize; #设置每行显示的字符数 linesize 10000 SQL> show pagesize; #设置每页显示的行数 pagesize 1000 SQL> set linesize 100; SQL> set pagesize 300; SQL> show linesize; linesize 100 SQL> show pagesize; pagesize 300 col 列名 for …

ASP.Net中利用CSS实现多界面两法

通过使页面动态加载不同CSS实现多界面 方法一: <%page language"C#"%> <%import namespace"System.Data"%> <script language"c#" runat"server"> public void page_load(Object obj,EventArgs e) { //创建服务器…

面试90%都会翻车的高可用+高并发+负载均衡架构设计 !

很多人面试的时候被问到一个让人特别手足无措的问题&#xff1a;你的系统如何支撑高并发&#xff1f;对于一个公司而言&#xff0c;“为什么要高可用”关于负载均衡架构设计你了解多少&#xff1f;大多数同学被问到这个问题压根儿没什么思路去回答&#xff0c;不知道从什么地方…

Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)

linux 如何显示一个文件的某几行(中间几行) 【一】从第3000行开始&#xff0c;显示1000行。即显示3000~3999行 cat filename | tail -n 3000 | head -n 1000 【二】显示1000行到3000行 cat filename | head -n 3000 | tail -n 1000 *注意两种方法的顺序 分解&#xff1a; tail …

PHP更新数据库记录

//更新记录$query"insert into chinachaodai (name,theindex)values (公司,1)";$result$mysqli->query($query);if($result){ echo ("返回行数:".$mysqli->affected_rows);}else{ echo("失败了");}$mysqli->close();

MySQL 用户与授权管理详解

大纲一、前言二、创建用户并授权三、GRANT语句的种类四、撤权并删除用户一、前言做为Mysql数据库管理员管理用户账户&#xff0c;是一件很重要的事&#xff0c;指出哪个用户可以连接服务器&#xff0c;从哪里连接&#xff0c;连接后能做什么。Mysql从3.22.11开始引入两个语句来…

聚焦联机交易分析一体化,巨杉数据库湖仓一体云产品全线升级

2021年5月15日&#xff0c;领先的金融级分布式数据库厂商 SequoiaDB巨杉数据库 举行了2021年春季发布会。在本次发布会中&#xff0c;巨杉数据库基于「湖仓一体」架构&#xff0c;针对不同的业务需求场景细分出全新的产品线。同时进行了最新的SequoiaDB Cloud数据库云平台操作演…

css :after或:before写小三角形

2019独角兽企业重金招聘Python工程师标准>>> .type_form_tab:after {content: ;position: relative;border: 0.3rem solid #d8d8d8;border-color: #d8d8d8 transparent transparent;width: 0;height: 0;top: 0.7rem;left: 0.3rem; }转载于:https://my.oschina.net/d…

C#调用windows api的要点

在.Net Framework SDK文档中&#xff0c;关于调用Windows API的指示比较零散&#xff0c;并且其中稍全面一点的是针对Visual Basic .net讲述的。本文将C#中调用API的要点汇集如下&#xff0c;希望给未在C#中使用过API的朋友一点帮助。另外如果安装了Visual Studio .net的话&…

如何全面认识联邦学习

作者 | 王健宗 李泽远 何安珣来源 | 大数据DT头图 | 下载于视觉中国什么是联邦学习联邦学习是一种带有隐私保护、安全加密技术的分布式机器学习框架&#xff0c;旨在让分散的各参与方在满足不向其他参与者披露隐私数据的前提下&#xff0c;协作进行机器学习的模型训练。经典联邦…

android 各种控件颜色值的设置(使用Drawable,Color)

在Android中&#xff0c;如果需要改变控件默认的颜色&#xff0c;包括值的颜色&#xff0c;需要预先在strings.xml中设置&#xff0c;类似字符串&#xff0c;可以反复调用。Android中颜色可以使用drawable或是color来定义。本例中strings.xml内容&#xff1a;<a href"h…

[20170914]tnsnames.ora的管理.txt

[20170914]tnsnames.ora的管理.txt--//昨天朋友讲tnsnams.ora的内容太长了,而且许多不需要的.管理不方便.我记得以前写[20150409]tnsnames.ora与IFILE.txt.链接--//http://blog.itpub.net/267265/viewspace-1561107/--//这样你可以按照某种分类管理.实际上这个我也是以前看别人…

C# ref和out关键字

ref和out关键字初解参数可以通过引用和值传递给方法。通过引用传递给方法的变量可以有调用它的方法作自由改变&#xff0c;所作的修改会影响原来的变量的值&#xff1b;在C#中&#xff0c;除非特别说明&#xff0c;所有的参数都是值传递。 这是默认情况&#xff0c;也可以使用r…

王炸不断,半导体巨头们到底在打什么牌?

作者 | 马超 责编 | 欧阳姝黎出品 | CSDN博客头图 | 下载于视觉中国最近整个半导体行业实在风起云涌&#xff0c;IBM 推出了 2nm 的芯片&#xff0c;苹果春季发布会上搭载 M1 的 iPad Pro 再度炸场、四月中旬 ARM 推出了新一代的 ARMv9、英特尔也拿出了最的至强三代 Ice Lake-…

什么是软件定义数据中心

近年来&#xff0c;“云计算”已经成为一个被滥用的名称&#xff0c;现在几乎所有的IT公司的项目都用云计算来冠名&#xff0c;似乎贴上了“云”标签&#xff0c;立刻变得高大上起来。提到云计算&#xff0c;很多人第一反应都是&#xff0c;亚马逊的AWS服务&#xff0c;或者谷歌…

React Native常用组件之ListView

1. ListView常用属性 ScrollView 相关属性样式全部继承dataSource ListViewDataSource 设置ListView的数据源initialListSize number 设置ListView组件刚刚加载的时候渲染的列表行数&#xff0c;用这个属性确定首屏或者首页加载的数量&#xff0c;而不是花大量的时间渲染加载很…

Oracle中merge into的使用

http://blog.csdn.net/yuzhic/article/details/1896878 http://blog.csdn.net/macle2010/article/details/5980965 该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中&#xff0c;使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了…

C#运算符资料

☆C#的运算符定义只有四种形式:--------------------------------------- ①public static 返回类型 operator ?(单形参) ②public static 返回类型 operator ?(双形参) ③public static implicit operator 隐转目标类型(单源类型形参) ④public static explicit operator 显…

厉害了,网易伏羲三篇论文上榜 AI 顶会 ACL

近日&#xff0c;国际AI顶尖学术会议ACL 2021&#xff08;Annual Meeting of the Associationfor Computational Linguistics&#xff09;公布了论文录用结果。网易伏羲共有三项研究被本届ACL收录&#xff0c;内容包括自然语言生成、无监督文本表示学习等方向&#xff0c;相关技…