锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

security❀javascript 2

时间:2022-10-30 13:30:00 2218连接器

window 对象

概述

浏览器内,window对象(注意,w小写)是指当前的浏览器窗口。它也是当前页面的顶象,即最高层的对象,所有其他对象都是其下属。如果没有声明变量,则默认为顶层对象的属性。

a = 1; window.a // 1 

在上述代码中,a它是一种直接赋值的变量,自动成为顶层对象的属性。

window它有自己的物理意义。事实上,它不适合作为最高层的顶层对象。这是一个语言设计错误。最早,在设计语言时,原始的想法是语言内置对象越少越好,这可以提高浏览器的性能。因此,语言设计师 Brendan Eich 就把window作为顶层对象,所有未声明赋值的变量都会自动变成window对象的属性。这种设计使得编译阶段无法检测到未声明的变量,但今天无法纠正。

window 对象的属性

window.name

window.name属性是一个字符串,表示当前浏览器窗口的名称。该属性主要与超链接和表单相匹配target属性使用。

window.name = 'Hello World!'; console.log(window.name) // "Hello World!" 

该属性只能保存字符串。如果写入的值不是字符串,它将自动转换为字符串。每个浏览器都有不同的存储容量,但一般来说,它可以高达几个MB。

只要浏览器窗口不关闭,属性就不会消失。例如,访问a.com当时,设置了页面的脚本window.name,然后在同一个窗口装载b.com,新页面的脚本可以读取上一页设置的脚本window.name。页面刷新也是如此。浏览器窗口一旦关闭,属性保存的值就会消失,因为窗口已经不存在了。

window.closed,window.opener

window.closed属性返回布尔值,表示窗口是否关闭。

window.closed // false 

以上代码检查当前窗口是否关闭。这种检查意义不大,因为只要能操作代码,当前窗口肯定不会关闭。该属性通常用于检查脚本打开的新窗口是否关闭。

var popup = window.open();  if ((popup !== null) && !popup.closed) { 
           // 窗户还开着 } 

window.opener属性意味着打开当前窗口的父窗。如果当前窗口没有父窗(即直接输入地址栏打开),则返回null

window.open().opener === window // true 

上表达式将打开一个新窗口,然后返回true

如果两个窗口之间不需要通信,建议将子窗口的opener属性显式设为null,这样可以减少一些安全隐患。

var newWin = window.open('example.html', 'newWindow', 'height=400,width=400'); newWin.opener = null; 

在上述代码中,子窗口opener属性设为null,没有办法再联系两个窗口了。

通过opener属性可以获得父窗的全局属性和方法,但仅限于两个窗口同源的情况(见《同源限制》一章),其中一个窗口由另一个打开。元素添加rel="noopener"属性可以防止新打开的窗口获得父亲的窗口,减少恶意网站的修改窗口 URL 的风险。

<a href="https://an.evil.site" target="_blank" rel="noopener">
恶意网站
a>

window.self,window.window

window.selfwindow.window属性都指向窗口本身。这两个属性只读。

window.self === window // true
window.window === window // true

window.frames,window.length

window.frames属性返回一个类似数组的对象,成员为页面内所有框架窗口,包括frame元素和iframe元素。window.frames[0]表示页面中第一个框架窗口。

如果iframe元素设置了idname属性,那么就可以用属性值,引用这个iframe窗口。比如 // 下面的脚本在 about.html 里面 var frameEl = window.frameElement; if (frameEl) { frameEl.src = 'other.html'; }

上面代码中,frameEl变量就是