精华内容
下载资源
问答
  • window在缺省状态
    2021-12-03 17:33:11

    [window对象]

    它是一个顶层对象,而不是另一个对象的属性,即浏览器的窗口。

    属性:

    defaultStatus 缺省的状态条消息

    document 当前显示的文档(该属性本身也是一个对象)

    frame 窗口里的一个框架((FRAME>)(该属性本身也是一个对象)

    frames array 列举窗口的框架对象的数组,按照这些对象在文档中出现的顺序列出(该属性本身也是一个

    对象)

    history 窗口的历史列表(该属性本身也是一个对象)

    length 窗口内的框架数

    location 窗口所显示文档的完整(绝对)URL(该属性本身也是一个对象)不要把它与如document.location

    混淆,后者是当前显示文档的URL。用户可以改变window.location(用另一个文档取代当前文档),但却不能改变

    document.location (因为这是当前显示文档的位置)

    name 窗口打开时,赋予该窗口的名字

    opener 代表使用window.open打开当前窗口的脚本所在的窗口(这是Netscape Navigator 3.0beta 3所引

    入的一个新属性)

    parent 包含当前框架的窗口的同义词。frame和window对象的一个属性

    self 当前窗口或框架的同义词

    status 状态条中的消息

    top 包含当前框架的最顶层浏览器窗口的同义词

    window 当前窗口或框架的同义词,与self相同

    方法

    alert() 打开一个Alert消息框

    clearTimeout() 用来终止setTimeout方法的工作

    close() 关闭窗口

    confirm() 打开一个Confirm消息框,用户可以选择OK或Cancel,如果用户单击OK,该方法返回true,单击

    Cancel返回false

    blur() 把焦点从指定窗口移开(这是Netscape Navigator 3.0 beta 3引入的新方法)

    focus() 把指定的窗口带到前台(另一个新方法)

    open() 打开一个新窗口

    prompt() 打开一个Prompt对话框,用户可向该框键入文本,并把键入的文本返回到脚本

    setTimeout() 等待一段指定的毫秒数时间,然后运行指令事件处理程序事件处理程序

    Onload() 页面载入时触发

    Onunload() 页面关闭时触发

    [document 对象]

    该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档。

    属性

    alinkColor 活动链接的颜色(ALINK)

    anchor 一个HTMI锚点,使用<A NAME=>标记创建(该属性本身也是一个对象)

    anchors array 列出文档锚点对象的数组(<A NAME=>)(该属性本身也是一个对象)

    bgColor 文档的背景颜色(BGCOLOR)

    cookie 存储于cookie.txt文件内的一段信息,它是该文档对象的一个属性

    fgColor 文档的文本颜色(标记里的TEXT特性)

    form 文档中的一个窗体()(该属性本身也是一个对象)

    forms anay 按照其出现在文档中的顺序列出窗体对象的一个数组(该属性本身也是一个对象)

    lastModified 文档最后的修改日期

    linkColor 文档的链接的颜色,即标记中的LINK特性(链接到用户没有观察到的文档)

    link 文档中的一个<A HREF=>标记(该属性本身也是一个对象)

    links array 文档中link对象的一个数组,按照它们出现在文档中的顺序排列(该属性本身也是一个对象)

    location 当前显示文档的URL。用户不能改变document.location(因为这是当前显示文档的位置)。但是,

    可以改变 window.location (用其它文档取代当前文档)window.location本身也是一个对象,而

    document.location不是对象

    referrer 包含链接的文档的URL,用户单击该链接可到达当前文档

    title 文档的标题((TITLE>)

    vlinkColor 指向用户已观察过的文档的链接文本颜色,即标记的VLINK特性

    方法

    clear 清除指定文档的内容

    close 关闭文档流

    open 打开文档流

    write 把文本写入文档

    writeln 把文本写入文档,并以换行符结尾

    区别:

    1、window 指整个窗体。document指当前整个文档页面(不包含窗口对象)。document是window的一个子对象。

    ​ 2、用户不能改变 document.location(因为这是当前显示文档的位置)。但是,可以改变window.location (用其它文档取代当前文档)window.location本身也是一个对象,而document.location不是对象

    更多相关内容
  • 设置或获取要窗口底部的状态栏上显示的缺省信息。 dialogArguments 设置或获取传递给模式对话框窗口的变量或变量数组。 dialogHeight 设置或获取模式对话框的高度。 dialogLeft 设置或获取模式对话框的左坐标。...
  •  defaultStatus 缺省状态条消息  document 当前显示的文档(该属性本身也是一个对象)  frame 窗口里的一个框架((FRAME>)(该属性本身也是一个对象) frames array 列举窗口的框架对象的数组,按照这些对象文档中...
  • 1. TCP参数简述 为改善终端用户对数据流量的要求,现对TCP的参数做简单...• TCP1323Opts─ RFC 1323 TCP options: window scaling and timestamp • MaxDupAcks─Maximum duplicate acknowledgements • TCPWindow...

    1.    TCP参数简述
    为改善终端用户对数据流量的要求,现对TCP的参数做简单的分析,并通过TCP参数的调整,以期达到提高用户使用感知度的目的。
    TCP参数如下:
    •    MTU─The Maximum Transfer Unit 
    •    TCP1323Opts─ RFC 1323 TCP options: window scaling and timestamp
    •    MaxDupAcks─Maximum duplicate acknowledgements
    •    TCPWindowSize─TCP Window Size
    •    Sack─Selective Acknowledgement

    以上均为影响网络性能的TCP参数,但最重要的是TCP窗口的大小。它决定了在给定时间里一个系统可以传输多少数据。每个TCP包都有一个头信息,头信息中有一定“窗口”域用来指明该系统接受数据缓冲区的大小。窗口大可以使远程系统传输较多的数据,窗口小则限制了传输的数据量,从而影响了网络的性能。因此要想最大限度地利用网络,应该选择适当的窗口大小,使之与可用宽带相匹配。若TCP窗口过小,终端用户将无法充分地利用网络上的可用宽带;如果TCP窗口过大,可能会导致错误恢复方面的问题,这样也会大大降低网络性能。
      一般来说,所有系统都有一缺省的TCP窗口大小。有些应用允许调用系统级的API,根据每个连接来设置TCP窗口大小。正确设置窗口大小,发送端就可以不停地发送数据,因为当所有的数据传完时,接收应答正好出现。
      当窗口过大时,TCP很难恢复丢失的数据。如一个远程的Web服务器得知某一客户设置的窗口大小为A,那么即使网上同时可传输的窗口大小只有B,它也会试图传送窗口大小为A的数据,这样就会有A-B窗口大小的数据在服务器和客户端之间的某一路由器处排队。如果数据丢失需要重传,需重传的数据必须排在后面,结果客户端认为连接不可恢复就会放弃该连接。另外,客户端不断地重复向服务器发送接收应答,也可能导致服务器中断连接。
    选择MTU 的大小,设置TCP最大片段大小(MSS)为1460=1500-40,40为最小TCP/IP包头的大小,在没有给出具体数值的时候,我们可设置TcpWindowSize = 6*MSS,须遵守的规则:TcpWindowSize=2*n*MSS , 若TCP参数在C/S端有推荐设置,TCP/IP的包头会相应的增长,则不应采用TcpWindowSize=2*n*MSS的设置,依据网管要求进行设置。只注意网上的数据量,并不能确定TCP窗口值的大小。必须了解连接使用的最大段大小,因为TCP的延迟接收应答,算法规定必须收到两个完整的TCP包时才能发送接收应答。
      实际上,缺省窗口大小应为MSS的4倍。如果接受窗口为MSS的2倍的话,发送端必须等待接收应答;如果接受窗口为MSS的4倍的话,发送者至少可以发送四个包,在头两个包的接收应答返回时,最后一个包刚刚发送。如果网络延迟较长时,接受窗口的大小应为MSS的6倍或8倍。
    TCP窗口域只有16位,因此其最大值为65535。如果网络传输速度慢但有很大的容量,优化的窗口大小可能超过它,这时需要使用TCP窗口的高级选项。
    TCP参数调整位置:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
    1、    SackOpts
    2、    TCP1323Opts
    3、    TCPMaxDupAcks
    4、    TCPWindowSize
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
    1、MTU

    参考:TCP传输慢问题分析 - 知乎 (zhihu.com)

    通过滑动窗口机制来控制接收窗口,表示着自己此刻还能接收多少字节的报文。当这个窗口太小,那发送方只能按照这个窗口去发送数据,整体下来传输速率就肯定会低很多。

    RWND默认情况下占头部的16个bit,可以通过windows scaling 放大到32个bit。

    2、发送方的CWND基本上是没办法具体确认的,它的变化遵循一系列大佬给定的算法和接受到的ACK有关,这些算法涉及到:慢启动、拥塞避免、拥塞发生、快速恢复。

    来简单的说下上面四个过程,其中慢启动、拥塞避免差不多就如下所示:

    • 慢启动是从一个叫初始CWND的数值开始增长,这个初始CWND可能是2,可能是3也可能是10,代表多少个MSS的大小。Linux后来的版本里默认的初始值是10。
    • 慢启动过程中,发送方不断的接受到确认的ACK,在每经历一个RTT时间后CWND呈指数增长。所以虽然刚开始只有几个报文可以发送,但是指数的增长提速很快。
    • 慢启动到了一定的大小(ssthresh)就开始进入拥塞避免阶段,增长速度由指数增长变成了线性增长,主要是怕速度太快导致网络拥塞。
    • 拥塞避免的线性增长过程中如果发生了丢包导致超时重传或者快速重传就会启动拥塞算法,拥塞算法很多,都是为了减小CWND以及减小ssthresh的值。
    • 然后重新进入线性增长阶段,继续慢慢的增长。

    用一张图来说明慢启动的过程差不多就是这样:

    说完了上面这些,来看下可能会导致传输效率低下的几个方面,以及对应的解决办法。


    解决方案

    一、网络自身质量差导致的大量的重传、丢包导致传输速率上不去

    按照上面所说的,网络中大量的丢包和重传,势必会严重的影响CWND的增长。

    这种情况下,如果网络本来就烂的要死,那我们还想着继续用大马力去传文件只会给这个网络添堵。所以适当的做法应该是尽可能的让自己传输不影响网络,所以有两种方案可以选择:

    • 降低发送方CWND的增长;

    发送方的CWND增长的慢了,也就是发送数据的速率慢了,自然对网络的影响就小了。但是这里有一点疑问,我们的本意是提高传输速率,那降低CWND的增长岂不是反而降低了传输速率了?实际上并不是这样,要知道网络质量差导致的丢包重传对CWND的影响是巨大的,如下图所示

    大多数拥塞算法在遇到快速重传的时候都会把CWND降低到一半并降低ssthresh,在遇到超时重传更严重,直接把CWND置成1了又得重新开始。而如果只是降低CWND的增长速度,顶多就是早点进入拥塞避免阶段的线性增长,整体的传输速率仍然是得到了提升。

    降低CWND增长的方法,可以通过改小ssthresh的值,使指数增长过程持续的更短一点以及改小初始CWND,让增长的数值变小:

    Linux:

    ip route方法,对通过此路由的TCP连接有效,可同时修改初始化的CWND和ssthresh。

    ip route change $r initCWND 10 ssthresh 10000

    ( $r 用ip route 显示的结果填充,ssthresh的值很多时候默认都是65535)

    Windows的方法我没查到。

    • 降低接收方的RWND;

    降低接收方的RWND,这样就限制了发送方发送数据的速率,从而实现降低传输速率来防止丢包。

    Linux:

    可以在 /etc/sysctl.conf 里面插入

    net.ipv4.tcp_rmem = <MIN> <DEFAULT> <MAX>,然后sysctl -p 刷新,就可以限制接收窗口小于MAX的值;修改完了以后可以使用 sysctl -a | grep tcp_rmem 来查看是否已经生效。

    Windows:

    需要修改注册表:不需要重启

    对于 Windows 2000,展开以下注册表子项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces

    对于 Windows Server 2003 及以后,展开以下注册表子项:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

    在编辑菜单上 新建,然后单击 DWORD 值,在新值框中键入TcpWindowSize ,单击修改。在数值数据框中键入所需的窗口大小。

    只说了如何修改,那怎么确认到底应该修改成多大的窗口呢?给一个计算方式:

    [TCP Window Size in bits] = [Throughput in bits per second] * [Latency in seconds]

    即RWND的值等于链路吞吐和带宽延迟的乘积的时候能最大化。

    比如链路带宽是100Mb,通过ping对方得到的延迟是50ms,那么RWND就应该是

    100 * 0.05 = 5Mb = 5 * 1000 * 1000 / 8 ≈ 60 0000 bytes

    (实际上计算延迟应该使用更精确的方法,比如在wireshark中去查看。另外也可以用这个公式来计算一个tcp连接的理论上最大的带宽。)

    需要注意,上面给出的linux的修改方式只是通过修改tcp_rmem 缓冲区大小来间接的影响RWND,实际上 tcp_rmem 里面还得维护一些tcp的状态信息,所以真实获得的 RWND 会比tcp_rmem要小1/2或者小1/4,具体小多少根据linux的某些设置。

    二、CWND的增长过慢导致速度上不去

    前面也提到了CWND是决定发送方的发送数据的窗口大小,在一个带宽以及网络质量都正常的环境下,如果CWND因为某些限制一直提不上去,那么本着传输速率取RWND和CWND中小的那一个原则,RWND配置的再大也无济于事。

    影响CWND的增长可能有以下几个方面:

    1)拥塞算法,不同的算法对CWND的增长和减少都有一定的差别,可以修改但肯定不是最优的方案。

    2)初始CWND的值,CWND在慢启动时间内都是 *2 的速度增长,初始的CWND变大的话肯定能提高增长速度,但是一般也不推荐改动,修改方式在前面已经提到。

    3)sthresh门限,CWND的慢启动在什么时候结束就是由ssthresh限制,可以把ssthresh的值改大,这样慢启动的过程就会持续的更长时间,CWND的增长速度自然就会加大,修改方法在前面已经提到。

    4)增加接收方的ACK数量,CWND的增长和接受到的报文ACK数量是有直接关系的,也就是最理想的情况下,发送方的每个报文都能触发接收方回复一个ACK,这样CWND就能按照算法预期的增长。但实际上有某些软硬件的特性会影响ACK报文的数量,

    比如:

    网卡的TSO/GSO/LSO/LRO功能,目的在于减轻CPU的负载,让TCP分段的时候交给网卡处理,这样上层处理的一个大包由好几个报文组成,进行回复ACK的时候自然也只是回复大包,那ACK的数量就肯定会变少。

    处理的方法也很简单,关闭网卡的这些特性:

    Linux:

    ethtool -K ethx tso off gso off lso off lro off # 有的接口可能不支持其中的部分特性,执行这个命令的时候会报错,也可以挨个执行off命令。

    Windows:

    网卡的“配置”里面关闭“大量传送减负”,如果是英文的话就是“Large Send Offload V2 (IPv4)

    三、没有开启SACK功能导致重传效率低

    Sack功能是TCP三次握手过程中协商的一个参数,旨在发送Duplicate ACK告诉发送方指定报文没收到的时候,顺带再告诉发送方已经接收到了后面的报文段,这样发送方只需要重传丢失的部分,对于SACK中提及的已经收到的报文段则不需要重传。

    用一张图表示SACK功能的作用:

    300-499片段丢失,收到了500-699的片段,那么接收方在回应ACK报文时,ack=300,sack携带的范围是500-699。这样发送方就明白了300-499之间的报文丢失了,然后重传300-499就可以了。后面的700-899片段丢失后的处理方式类似。

    在wireshark中可以看出sack的内容:

    在没有开始sack的情况下,如果其中一个报文丢失,在触发三次Dup ACk后的快速重传后,会把这个丢失的报文后面已经发送的所有报文都重新再发送一次,这样一来效率自然就会底下,在重传多的网络中开启SACK和没开启SACK的速率要差很多倍。可以通过TCP的三次握手来判断是否支持SACK:

    需要注意,SACK功能需要两边都支持,也就是三次握手中的SYN和SYN+ACK的报文都必须在option选项中允许。

    开启SACK方法:

    linux:

    sysctl -w net.ipv4.tcp_sack=1

    查看是否生效:sysctl -a|grep tcp_sack

    windows:

    注册表

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\SackOpts 值修改成1

    需要重启。

    四、接收方窗口RWND太小

    前面也提到了RWND是决定接收方的可接收的数据窗口大小,在一个带宽以及网络质量都正常的环境下,如果RWND因为某些限制一直提不上去,那么本着传输速率取RWND和CWND中小的那一个原则,CWND配置的再大也无济于事。

    在TCP三次握手的过程中会交互一个叫 window scale 的选项,其作用为扩大RWND的因子,比如客户端告诉服务器自己的WS是8,那么后续接收端在回复ACK报文的时候携带的window大小就要 *8处理。在wireshark中显示出来的window是已经自动计算过后的,比如:

    这个win=31872就是已经计算过后的RWND的值,因为需要WS的参与,所以在进行抓包操作的时候必须要把TCP的三次握手捕获到,否则wireshark无法得知WS,也就没办法正确的计算出RWND,会导致在很多报文显示和识别方面出错:

    样例中因为没有捕获到TCP三次握手,window scale的值只能重置成未知的负数,window size也就只能自动变成最大的65535。此时这个报文被wireshark显示为window FULL,但实际上可能并非如此,只是因为wireshark没办法计算真实的window而已。

    RWND同样是一个从较小的值慢慢增大到最大值的过程,具体是否变化还得看发送方发送数据的频率和自己这边应用层处理数据的频率,通过接收方的ACK报文中总是能看到当前的RWND大小。当RWND被占满且应用层一直没来及取数据的时候,接收方或者发送方告知RWND已满,此时发送方会停止发送,然后定期通过keeplive报文来探测接收方的RWND情况,当RWND腾出空间会通告给发送方 window update报文来更新窗口。

    Linux和windows上修改RWND的方式在之前就已经有说明,还需要注意一点:linux上window scale功能如果被关闭了,那么修改RWND是没有作用的,linux上可以通过:

    cat /proc/sys/net/ipv4/tcp_window_scaling 来查看是否开启WS,在没开启WS的情况下,RWND总是使用65535大小。

    比如下面这个例子,我用公司的0.70 FTP上传文件的时候速度很慢只有600KB/s,抓了个包:

    服务器通告自己的WS只有1,势必会造成RWND很小,事实也证明了我的猜测,在后续的报文里就看到了一堆的 TCP Window FULL的提示,也就是因为这个,发送方的发送数据速率受限。

    关于RWND的窗口被耗尽的提示在wireshark中有两种:

    1. TCP window FULL,是发送方在发送报文的时候,发现自己已经发出去的没有被ACK确认的报文总大小已经超过了接收方宣称的window值;此时发送方只能等待接收方的新的ACK,才能继续发送报文。
    2. TCP zero window,是接收方自己发送的,表明自己的window已经被占满无法接受更多的数据,只能等待应用来把数据取走;此时发送方只能等待 window update 消息才能继续发送报文。

    要处理的方法很简单,增加WS的值即可:

    Linux:

    sysctl -w net.ipv4.tcp_adv_win_scale=3

    Windows的没找到

    顺便按照之前提供的公式计算一下公式的正确性:

    通过wireshark的RTT计算图表可以看出RTT延迟大约是100ms

    RWND即BDP为65535,可得结果:

    [Throughput in bits per second] = [TCP Window Size in bits] / [Latency in seconds]

    [Throughput in bits per second] = 65535 bytes / 0.1 s ≈ 600 KB

    五、老生常谈的纳格算法和延迟确认共存的延迟

    简单的介绍一下纳格(nagle)算法和延迟确认的作用:

    nagle算法:是为了减少网络中的小包,把多个小包拼凑在一起发送。主要是在早期的带宽捉急的时代发明被使用的。在任意时刻,最多只能有一个未被ACK确认的小包,如果已经有一个小包没有被ACK,那么后续应用程序发送到缓冲区的小包只能等待前面一个小包被ACK以后才能继续发送。

    延迟确认:为了让ack报文可以被数据传输捎带过去。比如客户端给服务器上传文件,此时服务器扮演的是数据的接收方要回应ACK,如果此时服务器要回显上传的状态,那么肯定也会回送数据给客户端,此时ACK报文就可以和这些回送的数据一起发送。这样就实现了避免纯ACK报文占用网络,要知道纯ACK报文没有一个字节的数据却要被填充成64字节发送到网络上就是一种浪费带宽的行为。

    都是为了节省带宽,初衷都是善良的,但是当他们结合在一起使用的时候就可能捅娄子了,用一张图来说明一下问题的所在:

    (图里面我写了其他的一些术语,这些都是一些操作不同操作系统的实现细节,不用过多的关注,只要知道有这么一回事就行了。)

    再通过实际遇到的问题来看下。前几天正好遇到了一个l2tp的问题,用户反馈不通过vpn直接下载可以达到6MB/s,通过 l2tp 下载速度只有250KB/s。我本地搭建环境测试通过 l2tp下载速度会慢1倍作用,这个结果是可以接受的毕竟涉及到封装之类的操作,但是结果和客户的反馈差距很大。于是就在用户的客户机上抓了份包,结果接看到了这节讨论的延迟ACK的问题:

    # 518、#519、#520 是一个完整的TCP报文分成了三个分段,其中#518和#519是根据MSS最大值来切分的而#520是剩余的小片。客户端 172.17.1.2在收到#518和#519以后满足了FULL size立马回应了ACK,通过#521的Ack=393056等于#519的seq 391776 + len 1280可以看出#521回应的是#519。

    接下来#522回应的就是#520了,看似一切都很正常,但是查看#522和#521之间的时间就发现期间间隔了200ms,这就是问题的根本原因所在了。通过wireshark统计一下这样的情况存在多少(时间序列 tcptrace 图表):

    这么乍一看还挺正常,tcp的sequence增长很匀称,没啥毛病,但是一放大,哼哼问题就暴露出来了:

    延迟ack啊,你是那么多那么的多,速度怎么能快起来嘛!知道了问题和延迟ack有关,那就容易了,关闭就可以了。

    关于nagle的例子我实际中没有遇到,以后遇到了再补上吧。

    关闭延迟ack和nagle的方法:

    Windows:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters\Interfaces\{对应的网卡UUID}

    新建DWORD 把TcpAckFrequency(delay ack) 和 TCPNoDelay (nagle算法)的值都为1,然后重启。

    Linux:

    Linux里面处理没有像windows那么直接,linux要关闭nagle算法需要在程序代码里修改setsocketopt的选项,把TCP_NODELAY(nagle)激活,以及TCP_QUICKACK用来关闭delay ack。这些操作在我们平时处理客户的应用问题面前就没办法实际去操作了,不过linux还有其他方式可以起到类似的效果:

    echo 1 > /proc/sys/net/ipv4/tcp_low_latency # 牺牲高吞吐来降低延迟。

    话说回来,上面那个延迟ACK的截图里面还有一些内容要补充一下,#520的572字节的报文此时被认为是一个小包所以ACK被延迟了,然而同样方式分段的1004就没有被延迟ACK,说明此时系统认为1004不是一个小包,或者解释成截图下方的发送方连续的6个报文,每两个报文就能完成一次FULL size所以能成功的回复ACK。具体是什么情况就可能得去看算法实现了。

    还有一点比较奇怪的,通过wireshark可以看到发送方在接受到#520的ACK之后会立马再继续发送数据,也就是此时发送方并不是休息状态而是有数据已经到缓冲区了,没有立即发出的话按照网上介绍的资料:

    1. 发送方的CWND已经耗尽只能等待ACK以后才有新的空间发送报文;
    2. 接收方的RWND已经耗尽,只能等应用层来取;
    3. 之前还有未被确认的小包,但是看后续发出的#523的报文并不是小包。

    所以,这块也是一直没想通的,可能还是某些细节没掌握到吧,但归根到底还是延迟ack在捣鬼。

    展开全文
  •  defaultStatus 缺省状态条消息  document 当前显示的文档(该属性本身也是一个对象)  frame 窗口里的一个框架((FRAME>)(该属性本身也是一个对象)  frames array 列举窗口的框架对象的数组,按照这些对象...

    [window对象]

        它是一个顶层对象,而不是另一个对象的属性,即表示浏览器中打开的窗口。

      1、属性
      defaultStatus 缺省的状态条消息
      document 当前显示的文档(该属性本身也是一个对象)
      frame 窗口里的一个框架((FRAME>)(该属性本身也是一个对象)
      frames array 列举窗口的框架对象的数组,按照这些对象在文档中出现的顺序列出(该属性本身也是一个
    对象)
      history 窗口的历史列表(该属性本身也是一个对象)
      length 窗口内的框架数
      location 窗口所显示文档的完整(绝对)URL(该属性本身也是一个对象)不要把它与如document.location
    混淆,后者是当前显示文档的URL。用户可以改变window.location(用另一个文档取代当前文档),但却不能改变
    document.location (因为这是当前显示文档的位置)
      name 窗口打开时,赋予该窗口的名字
      opener 代表使用window.open打开当前窗口的脚本所在的窗口(这是Netscape Navigator 3.0beta 3所引
    入的一个新属性)
      parent 包含当前框架的窗口的同义词。frame和window对象的一个属性
      self 当前窗口或框架的同义词
      status 状态条中的消息
      top 包含当前框架的最顶层浏览器窗口的同义词
      window 当前窗口或框架的同义词,与self相同

      2、方法
      alert() 打开一个Alert消息框
      clearTimeout() 用来终止setTimeout方法的工作
      close() 关闭窗口
      confirm() 打开一个Confirm消息框,用户可以选择OK或Cancel,如果用户单击OK,该方法返回true,单击
    Cancel返回false
       blur() 把焦点从指定窗口移开(这是Netscape Navigator 3.0 beta 3引入的新方法)
      focus() 把指定的窗口带到前台(另一个新方法)
      open() 打开一个新窗口
       prompt() 打开一个Prompt对话框,用户可向该框键入文本,并把键入的文本返回到脚本
      setTimeout() 等待一段指定的毫秒数时间,然后运行指令事件处理程序事件处理程序
      Onload() 页面载入时触发
      Onunload() 页面关闭时触发

     

    [document 对象]
        该对象是window和frames对象的一个属性,是显示于窗口或框架内的一个文档。

      1、属性
      alinkColor 活动链接的颜色(ALINK)
      anchor 一个HTMI锚点,使用<A NAME=>标记创建(该属性本身也是一个对象)
      anchors array 列出文档锚点对象的数组(<A NAME=>)(该属性本身也是一个对象)
      bgColor 文档的背景颜色(BGCOLOR)
      cookie 存储于cookie.txt文件内的一段信息,它是该文档对象的一个属性
      fgColor 文档的文本颜色(<BODY>标记里的TEXT特性)
      form 文档中的一个窗体(<FORM>)(该属性本身也是一个对象)
      forms anay 按照其出现在文档中的顺序列出窗体对象的一个数组(该属性本身也是一个对象)
      lastModified 文档最后的修改日期
      linkColor 文档的链接的颜色,即<BODY>标记中的LINK特性(链接到用户没有观察到的文档)
      link 文档中的一个<A HREF=>标记(该属性本身也是一个对象)
      links array 文档中link对象的一个数组,按照它们出现在文档中的顺序排列(该属性本身也是一个对象)
      location 当前显示文档的URL。用户不能改变document.location(因为这是当前显示文档的位置)。但是,
    可以改变 window.location (用其它文档取代当前文档)window.location本身也是一个对象,而
    document.location不是对象
      referrer 包含链接的文档的URL,用户单击该链接可到达当前文档
      title 文档的标题((TITLE>)
      vlinkColor 指向用户已观察过的文档的链接文本颜色,即<BODY>标记的VLINK特性

      2、方法
      clear 清除指定文档的内容
      close 关闭文档流
      open 打开文档流
      write 把文本写入文档
      writeln 把文本写入文档,并以换行符结尾

     

    一、jQuery中的$(window).load()与$(document).ready()的区别

    1.执行时间 
    window.onload()即jquery写法中的$(window).load(function(){})必须等到页面内包括图片的所有元素加载完毕后才能执行。 
    $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。 
    2.编写个数不同 
    window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个(最后一个)
    $(document).ready()可以同时编写多个,并且都可以得到执行 
    3.简化写法 
    window.onload没有简化写法 
    $(document).ready(function(){})可以简写成$(function(){});

     

    二、$(window).height()和$(document).height()的区别

    jQuery(window).height()代表了当前可见区域的大小,
    jQuery(document).height()则代表了整个文档的高度,可视具体情况使用.

    注意:当浏览器窗口大小改变时(如最大化或拉大窗口后) ,
    jQuery(window).height() 随之改变,但是
    jQuery(document).height()是不变的。

     

    三、$(window).scroll()和$(document).scroll()的区别

     

    1、scroll()定义和用法:

    当用户滚动指定的元素时,会发生 scroll 事件。

    scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口)。

    2、两者在使用效果上区别不大,但所有浏览器基本都支持$(window).scroll(),但$(document).scroll()就不一定了。

     

    四、$(window).scrollTop()和$(document).scrollTop()的区别

    1、scrollTop()定义和用法:

    scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置(即:滚动条最上方与该元素顶部的距离)。

    输入参数比如: $(window).scrollTop(100),将垂直位置设置为100px;

    不输入参数比如: $(window).scrollTop(100),返回匹配元素的滚动条的垂直位置。

    2、$(window).scrollTop()和$(document).scrollTop()两者在使用效果上区别不大,但所有浏览器基本都支持前者,但后者就不一定了。

     

    附:一个返回顶部功能,对以上知识的应用

    ;$(function(){
        "use strict";
        var backButton=$('.back-to-top ');//css中请事先将按钮隐藏
        //返回顶部按钮点击事件
        backButton.on('click',function(){
            $('html,body').animate({
                scrollTop:0
            },800)
        });
        //窗口向下滚动一屏后显示‘返回顶部按钮’
        $(window).on('scroll',function(){
            if($(window).scrollTop() > $(window).height())
                backButton.fadeIn();
            else
                backButton.fadeOut();
        })
    });
    展开全文
  • JavaScript Window窗口对象

    千次阅读 多人点赞 2020-01-18 11:49:05
    文章目录一、Window对象概述1、Window对象属性2、Window对象方法3、如何使用二、对话框1、警告对话框2、确认对话框3、提示对话框三、打开与关闭窗口1、打开窗口2、关闭窗口(1)关闭当前窗口(2)关闭子窗口四、控制...


    一、Window对象概述

    Window对象可以用来打开浏览器,调整浏览器的位置、大小等等功能。

    Window对象可以处理框架和框架之间的关系,通过这种关系在一个框架中处理另一个框架中的文档。他也是所有对象的顶级对象,通过Window对象的子对象进行操作,可以实现更多的效果。

    1、Window对象属性

    每个对象都有自己的属性,顶级对象Window是所有其他子对象的父对象,它可以出现在每个页面上,并且可以咋单个JS应用程序中被多次使用。

    下表列出了一些Window对象常用属性:

    属性说明
    document对话框中显示当前文档
    frames表示当前对话框中所有frame对象的集合
    location指定当前文档的URL
    name对话框的名字
    status/defaultStatus状态栏中的当前信息
    top表示最顶层的浏览器对话框
    parent/opener表示包含当前对话框的夫对话框
    closed表示当前对话框是否关闭(布尔值)
    self表示当前对话框
    screen表示用户屏幕,提供屏幕尺寸、颜色深度等信息
    navigator表示浏览器对象,用于获取与浏览器相关的信息

    2、Window对象方法

    方法说明
    alert()弹出警告对话框
    confrim()在确认对话框显示指定的字符串
    prompt()弹出一个提示对话框
    open()打开新浏览器对话框并且显示URL或名字引用的文档,并设置创建对话框的属性
    close()关闭被引用的对话框
    focus()指定对话框放在所有浏览器最前面
    blur()指定对话框放在所有浏览器最后面
    scrollTo(x,y)把对话框滚动到指定的坐标
    scrollBy(offsetx,offsety)按照指定位移量滚动对话框
    setTimeout(timer)在指定的毫秒数过后,对传递的表达式求值
    setInerval(interval)指定周期性执行代码
    moveTo(x,y)将对话框移动到指定坐标
    moveBy(offsetx,offsety)将对话框移动到指定的位移量处
    resizeTo(x,y)设置对话框大小
    resizeBy(offsetx,offsety)按照指定的位移量设置对话框大小
    print()“打印”
    navigate(URL)使用对话框显示URL指定的页面

    3、如何使用

    JS运行使用一个字符串来给窗口命名,也可以使用一些关键字来代替。

    Window对象可以直接调用方法和属性,不需要使用new运算符来创建对象:

    window.属性名
    window.方法名(参数列表)
    
    //    使用关键字来代替window   //
    parent.属性名
    parent.方法名(参数列表)
    

    二、对话框

    为了响应用户的某种需求而弹出的小窗口

    1、警告对话框——alert()

    语法如下:

    window.alert(str);
    

    弹出警告对话框,str为对话框显示的字符串,一般运行结果如下:
    在这里插入图片描述

    2、确认对话框——confrim()

    语法如下:

    window.confrim(question);
    

    其中question是要显示在确认对话框的纯文本,也是表达了程序想让用户回答的问题

    而且他有一个返回值,如果单击了确定返回真、反之为假。

    比如下面的这段小程序:

    <script>
        var flag = window.confirm("你确定要关闭浏览器窗口吗?");
        if(flag)
            window.close();
    </script>
    

    会展示下面的结果:
    在这里插入图片描述

    3、提示对话框——prompt()

    弹出一个提示框,在提示框中有一个输入框,在显示输入框的时候,在输入框内显示提示字符串,在输入文本框显示缺省文本并等待用户输入,输入之后,单击确定返回用户输入的字符串,如果是取消则返回null值

    语法如下:

    window.prompt(str1,str2)
    

    参数说明:其中str1表示在对话框要被显示的信息,str2指定对话框内输入框的值。

    比如下面这段小程序:

    <script>
        function pro() {
            var message = document.getElementById("message");
            message.value = window.prompt(message.value,"返回的信息")
        }
    </script>
    <input id="message" type="text" size="40" value="请在此输入信息">
    <br><br>
    <input type="button" value="显示对话框" onClick="pro()">
    

    效果如下:
    在这里插入图片描述


    三、打开与关闭窗口

    1、打开窗口——open()

    语法格式:

    WindowVar = window.open(url,name,[location])
    

    参数说明:

    • WindowVar:如果open方法成功,返回一个Window对象的句柄。
    • url目标窗口的URL
    • name:目标窗口Window对象名称
    • location:大考窗口的可选参数
      他的可选参数,如下表所示:
    参数说明
    top窗口顶部距离屏幕顶部的像素数
    left窗口左端距离屏幕左端的像素数
    width/height宽度/高度
    scrollbars是否显示滚动条
    resizable设定对话框大小是否固定
    toolbar浏览器的工具条,包括后退及前进按钮
    menubar菜单条,一般包括有文件、编辑及其他一些条目
    location定位区,地址栏
    direction更新信息的按钮

    下面举几个例子:

    打开一个新窗口:window.open("new.html","new")

    打开一个指定大小的窗口:window.open("new.html","new","height=140,width=690")

    打开一个指定位置的窗口:window.open("new.html","new","top=300,left=200")

    打开一个带滚动条的固定窗口:window.open("new.html","new","scrollbars,resizable")

    2、关闭窗口

    (1)关闭当前窗口

    下面任意语句可以实现关闭当前窗口:

    window.close();
    close();
    this.close();
    

    例子:关闭子窗口时自动刷新父窗口

    步骤1: 在原来的页面,怼一个<a>链接,用于打开一个新窗口,代码如下:

    <a href="#" onClick="javascript:window.open('new.html','width=400,height=220')">打开链接</a>
    

    步骤2: 新建new.html,然后写入脚本和一个按钮,代码如下:

    <script>
        function clo() {
            alert("关闭子窗口!");
            window.opener.location.reload();        //刷新父窗口
            window.close();
        }
    </script>
    <input type="submit" value="关闭" onclick="clo()">
    

    效果如下:
    在这里插入图片描述

    (2)关闭子窗口

    通过窗口句柄以变量的形式进行保存,然后通过close方法关闭创建的窗口,语法如下:

    windowname.close();
    

    其中windowname表示已打开窗口的句柄

    例如,在主窗口旁边弹出一个子窗口,当单击主窗口的按钮后,自动关闭子窗口,代码如下:

    <form name="form1">
        <input type="button" name="Button" value="关闭子窗口" onclick="newclose()">
    </form>
    <script>
        var win = window.open("new.html","new","width=300,height=100");
        function newclose() {
            win.close();
        }
    </script>
    

    效果如下:
    在这里插入图片描述


    四、控制窗口

    1、移动窗口

    (1)moveTo()方法

    语法如下:

    window.moveTo(x,y);
    

    其中x,y是窗口左上角的坐标,

    (2)resizeTo()方法

    这个方法可以将当前窗口改成(x,y)大小,x、y分别代表宽度和高度,语法如下:

    window.resizeTo(x,y);
    

    (3)screen对象

    屏幕对象反映了当前用户的屏幕设置,下表列出了屏幕对象的一些属性:

    属性说明
    width整个屏幕的水平尺寸
    height整个屏幕的垂直尺寸
    pixelDepth显示器每个像素的位数
    colorDepth返回当前颜色设置所用的位数,1代表黑白;8代表256色(256种颜色);16代表增强色(大概64000种颜色);24/32代表真彩色(1600万种颜色)
    availWidth返回窗口内容区域的水平尺寸
    availHeight返回川康内容区域的垂直尺寸

    2、窗口滚动

    利用Window对象的scroll()方法可以指定窗口的当前位置,从而实现窗口的滚动效果,语法如下:

    window.scroll(x,y);			//滚动到指定的绝对位置,相对文档的左上角
    window.scrollTo(x,y);		//同上
    window.scrollBy(x,y);		
    /*可以将文档滚动到相对位置,如果参数x为正数,向右滚动,否则向左;如果参数y为正数向下滚动,否则向上*/
    

    比如选择一张我们的女神江疏影把图片拉大,然后写脚本:

    <img src="1.jpg" height="1000">
    <script>
        var pos = 0;
        function scroller() {
            pos++;
            scrollTo(0,pos);
            clearTimeout(timer);
            var timer = setTimeout("scroller()",10);
        }
        scroller();
    </script>![在这里插入图片描述](https://img-blog.csdnimg.cn/20200118113027730.gif)
    

    效果如下:(太美啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
    在这里插入图片描述

    3、改变窗口大小

    实现将当前窗口改变为指定的大小(x,y),当x,y>0为扩大,反之为缩小,语法如下:

    window.resizeBy(x,y);
    

    例子:动态改变窗口大小

    代码如下:

    <script>
        var winheight,winsize,x;
        function openwin() {
            winheight=100;
            winsize=100;
            x=5;
            win2 = window.open("new.html","","scrollbars='no'");
            win2.moveTo(0,0);
            win2.resizeTo(100,100);
            resize();
        }
        function resize() {
            if(winheight>=screen.availHeight-3)
                x=0;
            win2.resizeBy(5,x);
            winheight+=5;
            winsize+=5;
            if(winsize>=screen.width-5){
                winheight=100;
                winsize=100;
                return;
            }
            setTimeout("resize()",50);
        }
    </script>
    <a href="javascript:openwin()">打开一个自动改变大小的窗口</a>
    

    效果如下:
    在这里插入图片描述

    4、访问窗口历史

    利用history对象实现访问窗口历史,history对象是一个只读URL字符串数组,主要存储一个最近访问网页的URL地址列表。语法如下:

    [window.]history.property|method([parameters])
    

    history对象常用属性:

    属性说明
    length历史列表的长度,用于判断列表中的入口数目
    current当前文档的URL
    next历史列表的下一个URL
    previous历史列表的前一个URL

    常用方法:

    方法说明
    back()退回前一页
    forward()重新进入下一页
    go()进入指定网页

    比如使用history对象中的back()forward()方法来引导跳转:

    <a href="javascript:window.history.forward();">forward</a>
    <a href="javascript:window.history.back()">back</a>
    

    使用history.go()方法指定要访问的历史记录,如果参数为正数向前移动,否则向后移动

    <a href="javascript:window.history.go(-1)">向后退一次</a>
    <a href="javascript:window.history.go(2)">向前进两次</a>
    

    length属性访问history数组的长度,通过它可以很快访问末尾:

    <a href="javascript:window.history.go(window.history.length-1)">末尾</a>
    

    5、设置超时

    为一个窗口设置在某段时间后执行何种操作,称为设置超时

    window对象的setTimeout()方法用于设一个超时,语法如下:

    timerId = setTimeout(要执行的代码,以毫秒为单位时间)
    

    还可以使用clearTimeout()来中止该超时设置,语法格式如下:

    clearTimeout(timerId);
    

    展开全文
  • window对象用法

    千次阅读 2017-12-22 09:22:06
    open方法语法格式:window.open(URL,窗口名称,窗口风格)功能:打开一个新的窗口,并窗口中装载指定URL地址的网页。说明: open方法用于打开一个新的浏览器窗口,并新窗口中装入一个指定的URL地址 open方法...
  • 窗口风格(Window style)WS_BORDER 有边框窗口 WS_CAPTION 必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。 WS_CHILD 说明窗口为子窗口,不能应用于弹出式窗口风格(WS_POPUP)...
  • window.XMLHttpRequest详解

    万次阅读 多人点赞 2018-11-05 13:43:57
    window.XMLHttpRequest  XMLHttpRequest对象是当今所有AJAX和Web 2.0应用程序的技术基础。尽管软件经销商和开源社团现在都提供各种AJAX框架以进一步简化XMLHttpRequest对象的使用;但是,我们仍然很有必要理解.....
  • TCP Receive Window(TCP数据接收缓冲)定义了发送端没有获得接收端的确认信息的状态下可以发送的最大字节数。此数值越大,返回的确认信息就越少,相应的发送端和接收端之间的通信就越好。此数值较小时可以降低...
  • SQL Window使用技巧

    千次阅读 2018-08-04 14:13:13
    Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了。   2、设置关键字自动大写:Tools-&gt;Preferences-&gt;Editor,将Keyword case选择Uppercase。这样窗口中输入sql语句时,...
  • TCP 协议中的 Window Size与吞吐量

    千次阅读 2019-10-03 02:08:01
    这个窗口允许源端给定连接传送数据分段而不用等待目标端返回ACK,一句话描述:窗口的大小决定不需要对端响应(acknowledgement)情况下传送数据的数量。​官方定义:“The amount of octets that can be ...
  • javascript中window对象及属性

    千次阅读 2015-08-27 15:24:27
    window对象有以下方法: open、close、alert、confirm、prompt、setTimeout、clearTimeout、setInterval、clearInterval、moveBy、moveTo、resizeBy、resizeTo、scrollBy、scrollTo、find、back、forward、home、...
  • Window对象的属性

    千次阅读 2016-08-26 13:45:06
    一、location 对象 示例:...id=timlq#love 1. window.location.href:完整的 URL(可读取可设置) 读取:返回值 http://www.home.com:8080/location/page.html?ver=1.0&id=timl...
  • js window对象方法属性整理

    千次阅读 2016-04-10 18:21:13
    window对象有以下方法:  open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval moveBy moveTo resizeBy resizeTo scrollBy scrollTo find  back forward
  • javascript之window对象

    千次阅读 2014-12-10 08:51:50
    设置或获取要窗口底部的状态栏上显示的缺省信息。 dialogArguments  设置或获取传递给模式对话框窗口的变量或变量数组。 dialogHeight  设置或获取模式对话框的高度。 dialogLeft  设置或获取模式...
  • window方法大全

    千次阅读 2015-04-21 14:12:15
    window对象的status、location、name、self、opener属性的使用   Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY、FRAMESET或FRAME元素时,都会...
  • 11window对象的属性和方法

    千次阅读 2016-07-09 16:49:34
    Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有...由于window对象是其它大部分对象的共同祖先,调用window对象的方法和属性时,可以省略window对象的引用。例如:window.do
  • window.XMLHttpRequest对象详解

    千次阅读 2017-02-07 15:59:33
    window.XMLHttpRequest  XMLHttpRequest对象是当今所有AJAX和Web 2.0应用程序的技术基础。尽管软件经销商和开源社团现在都提供各种AJAX框架以进一步简化XMLHttpRequest对象的使用;但是,我们仍然很有必要理解...
  • 窗口风格(Window style)

    2018-06-07 22:32:51
    窗口风格(Window style) WS_BORDER 有边框窗口 WS_CAPTION 必须和WS_BORDER风格配合,但不能与WS_DLGFRAME风格一起使用。指示窗口包含标题要部分。(很明显,其中的WS_CAPTION就是多余的,因为它是由WS_BORDER和...
  • JS window对象常用方法

    千次阅读 2015-12-08 16:28:59
    [window.]属性 [window.]方法(参数) opener.属性 opener.方法(参数) self.属性 self.方法(参数) parent.属性 parent.方法(参数) top.属性 top.方法(参数) 窗口名称.属性 ...
  • window命令行

    千次阅读 2017-07-27 20:46:38
    符号链接(目录联接)的建立可以跨分区(如:d盘可以建立c盘文件或目录的链接),硬链接只能建立同一分区内的文件指向 b、硬链接只能用于文件,不能用于目录;目录联接只能用于目录;符号链接则均可以; c、硬...
  • Window Styles / EX Styles ···

    万次阅读 2018-12-21 20:40:11
    旋转按钮将自动更新伙伴控件中显示的数值,如果伙伴控件能接受输入,则可伙伴控件中输入新的旋转按钮值 UDS_NOTHOUSANDS 伙伴控件中显示的数值每隔三位没有千位分隔符 ...
  • CenterWindow()的用法

    千次阅读 2017-01-11 15:12:58
    CenterWindow()的用法 CenterWindow()的用法为:  void CenterWindow( CWnd* pAlternateOwner = NULL );  其中参数pAlternateOwner指向所想居中的窗口的指针。  然后利用函数GetSystemMetrics( int ...
  • window对象的属性和方法

    千次阅读 2016-07-10 18:34:03
    Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有...由于window对象是其它大部分对象的共同祖先,调用window对象的方法和属性时,可以省略window对象的引用。例如:window.do
  • 由于window对象是其它大部分对象的共同祖先,调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成: document.write()。 窗口中觖发本窗口对象的任何方法和...
  • Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开...由于window对象是其它大部分对象的共同祖先,调用window对象的方法和属性时,可以省略window对象的引用。例如:window.d
  •  defaultStatus 当status无效时,出现浏览器状态窗口上的缺省消息. name 内部名,为由window.open()方法打开的窗口定义的名字. windows方法 alert(“message”) 显示含有给定消息的”JavaScri

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,751
精华内容 13,500
热门标签
关键字:

window在缺省状态