关于window下自带name的属性

不知道大家有没有发现这样一种情况

  • 在控制台里直接输出未声明变量,正常情况应该是会报错的,而且声明未赋值的变量输出应该是undefined
var a;
//undefined
b;
//报错
  • 但是偏偏就个别特例,就是name属性
  • 其实window自身就带有name这个属性,在控制台输入window可以可以看到
  • 打开往下翻就可以找到


window.name直译过来是窗口名字,主要用于为超链接和表单设置目标(targets),什么意思呢,我们做个案例

  • 建立两个网页
  • 第一个页面
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>JSdemo1</title>
</head>
<body><a href="./demo2.html" target="hello world">跳转</a>
</body>
</html>
  • 第二个网页
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>JSdemo2</title><script>document.write( window.name + "<br>" + name )</script>
</head>
<body>
</body>
</html>
  • 我们打开一个网页点击跳转看看效果

  • 这里我们就可以看出,第一个网页的a标签通过target属性将值赋值给第二个窗口的name属性,这样第二个网页的name属性就有值了。

  • 还有一点需要注意,如果给name赋值,那么 window.name 会调用 类似于 toString 的方法将赋给它的值转换成对应的字符串表示。为什么说类似呢?因为toString的可以将Symbol数据类型转字符串,但它不行。

现在我们已经认识了window.name的属性了,可以做做下面这题试试手。

var name = 123;
var obj = {};
console.log(name + 123 + obj )

以下是关于 window.name 跨域的一些补充!!!

  • 这里提一下 window.open( strUrl , strWindowName , [strWindowFeatures] ) 的第二值也是可以给新窗口设置window.name,详情可参考 —— window.open
  • 用 window.name 实现跨域,是利用他的一个特点,就是在一个页面载入的其他页面将共享一个window.name,其他页面都有对其的读写权限,即使其他页面载入新页面,其window.name也不变。例:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>页面a</title>
</head>
<body>
<script>var a = window.open('./b.html','helloWord')console.log( '在页面a可以访问页面b的name值 : ' + a.name)
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>页面b</title><script>document.write( '页面b : ' + window.name )</script>
</head>
<body><a href="./c.html">载入新页面</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head><title>页面c</title>
</head>
<body>
<script>document.write(window.name)
</script>
</body>
</html>

三个页面输出如下


  • 跨域就是利用这一特性 + 工具人iframe 实现。例:
  • 下面有三个页面
  • 第一个页面放在域名localhost下
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>页面一</title>
</head>
<body><h1>页面一</h1><script>var iframe = document.createElement('iframe');//工具人iframe.style.display = "none";//工具人隐藏在背后默默付出var flag = false;iframe.onload = function () {if ( flag ) {var data = iframe.contentWindow.name;//contentWindow.name可以拿到iframe的窗口name值console.log(data);iframe.contentWindow.close();//关闭隐藏的页面document.body.removeChild(iframe);//删除隐藏的页面} else {flag = true;iframe.contentWindow.location = 'http://localhost/demo2.html';//这里因为浏览器同源策略,需要将链接改成与页面一同源的页面(也就是页面二),这里会再次触发load事件}}iframe.src = 'http://data/data.html';//跨域,这里窗口已经拿到name,所以上面更换地址后name的值依旧存在document.body.appendChild(iframe);</script>
</body>
</html>
  • 第二个页面是空页面,也是在localhost域名下
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>页面二</title>
</head>
<body>
</body>
</html>
  • 第三个页面是数据页面,放在data域名下
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>data</title>
</head>
<body><h1>数据</h1>
<script>window.name = '{data:"数据"}';//将数据存到window.name里
</script>
</body>
</html>

输出结果如下

总结就是,给iframe赋值跨域的链接,加载完后触发load事件,此时iframe已经拿到数据放在window.name里,因为浏览器同源策略没法直接拿iframe的name值,所以将iframe的地址改成同域名下的一个网页,在用contentWindow方法获取iframe的name值拿数据。

补充到这里就结束了,前端领域要学的很多,我也正处在学习阶段,要是哪里有问题欢迎大家指正,大家一起学习!!!

window.name属性详解(Javascript)相关推荐

  1. JS代码的window.location属性详解

    如果你稍微懂一些JS代码,一般都会知道 window.location.href 这个属性.并且用该属性获取页面 URL 地址: window.location.href = window.locat ...

  2. html中offsetleft属性,详解 javascript中offsetleft属性的用法

    此属性可以返回当前元素距离某个父辈元素左边缘的距离,当然这个父辈元素也是有讲究的. (1).如果父辈元素中有定位的元素,那么就返回距离当前元素最近的定位元素边缘的距离. (2).如果父辈元素中没有定位 ...

  3. window 程序报错 自动重启_好程序员web前端教程之详解JavaScript严格模式

    好程序员web前端教程之详解JavaScript严格模式,严格模式(Strict mode)是由ECMA-262规范定义的新兴JavaScript标准,发布于2009年12月第五版.旨在改善错误检查功 ...

  4. 详解 javascript中offsetleft属性的用法(转)

    详解 javascript中offsetleft属性的用法 转载  2015-11-11   投稿:mrr    我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...

  5. JavaScript Function.arguments 属性详解

    转载自   JavaScript Function.arguments 属性详解 arguments属性是正在执行的函数的内置属性,返回该函数的arguments对象.arguments对象包含了调用 ...

  6. 详解JavaScript变量类型判断及domReady原理 写得很好

    原文:详解JavaScript变量类型判断及domReady原理 我们知道,在开发JavaScript时候,经常要判断JavaScript变量类型,此 JavaScript教程 详细介绍JS变量的判断 ...

  7. window.onload用法详解

    网页中的javaScript脚本代码往往需要在文档加载完成后才能够去执行,否则可能导致无法获取对象的情况,为了避免这种情况的发生,可以使用以下两种方式: 一.将脚本代码放在网页的底端,这样在运行脚本代 ...

  8. 【input 标签的 type 属性详解】

    input 标签的 type 属性详解 1. input 输入标签的 type 属性 1.1 input 标签的 type类型 属性的常用属性值 ⑴ 单行文本框: type="text&qu ...

  9. Flash播放控件属性详解

    Flash 播放控件属性详解 一.属性篇 1.AlignMode(读写)  语法:AlignMode As Long  说明:对齐方式(与SAlign 属性联动).当控件的长宽比例与影片不一致且WMo ...

最新文章

  1. spark编程基础--5.2键值对RDD
  2. jenkins+docker部署java项目
  3. MapReduce关系代数运算
  4. C语言烧写C51单片机的线,51单片机烧写程序过程以及详细说明【图文】
  5. symbian 中自动寻找cmwap连接点,通杀uiq 2nd 3nd和s60 2nd 3nd 5nd
  6. 接口样板_完整的AWS Web样板
  7. quartus仿真6:74194构建线性反馈移位寄存器计数器LFSR
  8. ceph分布式存储简介
  9. 《如何克服社交焦虑》- (美)埃伦·亨德里克森著;冯晓霞译
  10. math: 雅可比矩阵 黑塞矩阵
  11. android gui工具,搞机助手简约易用的安卓ADB GUI玩机工具箱
  12. EMI原理、测量、解决
  13. 【火炉炼AI】深度学习001-神经网络的基本单元-感知器
  14. 自动出现的弹出窗口Js插件
  15. Intellij搭建spark开发环境
  16. 仪表板工具Stimulsoft Dashboards中的面板组件介绍
  17. java代码实现排序二叉树
  18. Hive数据类型、数据库相关操作、表的相关操做、数据的导入导出
  19. Micron内存DDR3型号查询 memory part
  20. 融合实体描述与路径信息的知识图谱表示学习模型

热门文章

  1. 电流测试c语言算法,电流检测电路设计方案汇总(六款模拟电路设计原理图详解)...
  2. Access 查询的IIF的写法
  3. 史上最全最实用的生活小窍门
  4. 苹果系统无法购买服务器,itunes目前无法处理您的购买怎么解决
  5. CS231A:Vanishing Points and Lines
  6. ARM Cortex-M3 学习笔记(3)
  7. [HAOI2008]糖果传递
  8. hive ddl语法使用详解
  9. 【考研英语-基础-长难句分析】特殊结构_分裂结构【插入式_同位语 插入语 状从 非限定从-从句后移式】
  10. windows 调试若干知识