window对象有个name属性,这是一个非常非常奇特的属性。只要当前的这个浏览器tab没有关闭,无论tab内的网页如何变动,这个name值都可以保持,并且tab内的网页都有权限访问到这个值,这就是跨域传递消息的原理。请大家阅读本文的详细内容,来了解一下这种特异的跨域消息传递方式。

基本描述

只要两个网页在同一个浏览器的tab里面呆过,每个网页都是可以接收和设置window.name这个值的。前提是:这个tab没有被关闭过。

  • f5刷新多少次都可以,这是无所谓的。
  • 中间跳转过多少个页面,这也是无所谓的。
  • 承载过的这些页面是不是同一个域名,这都是无所谓的。

思路扩展

想接收到UFO外星人给你传递的隐藏消息么?在你的页面里面读取一下window.name吧,真的会有意外的惊喜的,不确定性就是这个游戏的乐趣所在。

事实上,在上述假设的验证过程中,苏南大叔的博客确实收到了淘宝网传递的window.name值,淘宝网的这个值在苏南大叔用console设置后,被其他的淘宝js继续改写了。所以,看到的结果是下图类似的,这也就从侧面体现了:淘宝网确实在使用window.name来传递特殊数据(统计)。

苏南大叔:window.name 跨域隐式传递消息原理解析 - taobao
window.name 跨域隐式传递消息原理解析(图3-2)

苏南大叔:window.name 跨域隐式传递消息原理解析 - taobao_real
window.name 跨域隐式传递消息原理解析(图3-3)

总结

window.name跨域传递消息,实际上是个异类的应用,也可以说是一个小的漏洞吧。不过,这个问题存在了很多年了,估计将来也不会修复的。而且目前已经作为一项技术标准,投入到生产实践中来了。比如:跨域iframe自适应高度。

更多跨域相关经验文章,请点击这里查看:https://newsn.net/tag/cors/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   cors    window.name

本站的忠实读者小伙伴,正在阅读下面这些文章: