(二)文档请求不同源之window.name跨域

摘要:
应该注意,每个iframe都有一个包装它的窗口。该窗口是顶窗口的子窗口,它自然具有该窗口。name属性。窗name在加载不同页面后仍然存在,并且它可以支持非常长的name值。“;http://localhost:8080/a.html正在请求远程服务器http://localhost:8081/b.html我们可以在此页面下创建iframe。iframe的src属性指向服务器地址。使用iframe标记的跨域功能,服务器文件b.html设置window.name的值。

一、基本原理

window.name不是一个普通的全局变量,而是当前窗口的名字。这里要注意的是每个iframe都有包裹它的window,而这个window 是top window的子窗口,而它自然也有window.name的属性,window.name在不同的页面(甚至不同域名)加载后依旧存在(如果没修改则值不会变化),并且可以支持非常长的name值(2MB)。

二、测试步骤

在某个页面控制台输入

window.name = "Hello World";
window.location = "http://www.baidu.com";

页面跳转到了百度首页,但是window.name却被保存了下来,还是 Hello World。

1、创建a.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>window.name解决跨域a.html</title>
</head>
<body>
<script>
    let data = '';
    const ifr = document.createElement('iframe');
    ifr.src = "http://localhost:8081/b.html";
    ifr.style.display = 'none';
    document.body.appendChild(ifr);
    ifr.onload = function() {
      ifr.onload = function() {
          data = ifr.contentWindow.name;
            console.log('收到数据:', data);
      }
      ifr.src = "http://localhost:8080/c.html";
    }
</script>
</body>
</html>

2、创建b.html

<script>
   window.name = "你想要的数据!";
</script>

http://localhost:8080/a.html在请求远端服务器 http://localhost:8081/b.html的数据,我们可以在该页面下新建一个iframe,该iframe的src属性指向服务器地址,利用iframe标签的跨域能力,服务器文件b.html设置好window.name的值。

由于a.html页面和该页面iframe的src不同源,取不到iframe的 name值,所以我们需要在b.html加载完后重定向src到一个同源的html文件,或者设置成'about:blank;' 都行。这时候我只要在 a.html相同目录下新建一个c.html的空页面即可。如果不重定向src 就直接获取window.name会报错:windowname跨域

3、打开两个http服务器:

windowname跨域2

4、打开浏览器就可以看到结果:http://localhost:8080/a.html

5、JS解决iframe之间通信和自适应高度的问题  

免责声明:文章转载自《(二)文档请求不同源之window.name跨域》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#枚举转化示例大全,数字或字符串转枚举ORM之单表操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

spring-cloud之服务治理组件Eureka

前言 前几天我们分享了webflux的相关知识点,由于越分享发现内容越多,所以webflux的相关知识就先告一段落,但是就目前分享的内容来说,已经足够让我们对webflux有一个最近基本的认识,至于其他内容,我们后期继续分享。 昨天天太热了,不在状态,也脉动不回来,所以也就没有分享新的东西。 今天也热,感觉像进了烤箱一样,但是学习还是不能太懈怠,该坚持的不...

kong配置upstream实现简单的负载均衡

目录 通过konga实现 1. 配置upstream 2. 配置Service发布 3. 配置Route,匹配规则 4. 验证结果 通过 Kong Admin API实现 1. 配置upstream 2. 配置service 3. 配置route(more) [前言]: 本文以service和route知识为基础,通过配置upsrea...

找到一个不错的消息提示组件 ymPrompt V4.0

找到一个不错的消息提示组件,分享给朋友们,本文转载于ymPrompt V4.0版本发布【2009-03-02更新】,本文是参考它的demo。非常感谢原作者: ymPrompt消息提示组件4.0版使用简介 更换皮肤:QQ Simple SimpleGray VISTA dmm-Green bluebar black  修改默认配置:拖动窗体的透明度: 遮...

Centos 开启telnet-service服务

Centos 开启telnet-service服务 1. 查看linux版本信息: [loong@localhost ~]$ cat /etc/issue CentOS release 5.8 (Final) Kernel on an m 2. 查看系统是否已安装telnet-server,linux系统上默认已经安装telnet-client(或t...

WebPack前端打包工具

​ Webpack是一款用户打包前端模块的工具,它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。主要是用来打包在浏览器端使用的javascript的。同时也能转换、捆绑、打包其他的静态资源,包括css、image、font file、template等 webpack的官网是 http://webpack.github....

windows 环境下nginx + tomcat群 + redis 实现session共享

nginx作为负载均衡根据定义将不同的用户请求分发到不同的服务器,同时也解决了因单点部署服务器故障导致的整个应用不能访问的问题 在加入nginx之后,如果多个服务器中的一个或多个(不是全部)发生故障,均不影响用户的正常使用,会将用户请求分发到可以提供服务的服务器上 本节实例仅实现 一个nginx + 2个tomcat + redis实现java web应用...