window.name跨域

window.name?

每一个页面都有一个自己的window,而window.name是window的名字。

window.name跨域原理

window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个 window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因 新页面的载入而进行重置。
即我们在"http://www.baidu.com"页面的控制台设置window.name = "name=123",然后我们在控制台修改window.location.href = "http://www.youku.com",跳转页面后我们在控制台打印window.name,我们发现结果为我们刚才设置的‘name=123‘
利用此原理我们可以利用window.name来传递信息,且window.name可传递的信息量为2M,足够使用了。

操作如下

比如我们想要在a.html页面获取data.html页面传递的信息

首先我们在htttp://www.example.com/data.com页面下添加如下代码:

 <script>
    // 将我们想传递的信息赋值到data.html页面的window.name上
        window.name = "{"name":"lyl", "age": 18}";
    </script>

然后我们如何修改data.html页面的window.href,将其改变我a.html呢?显然我们无法在data.html页面修改window.href,所以我们利用一个隐藏iframe将data.html页面嵌入到a.html页面中,让iframe作为一个代理人,让iframe去代替我们获取数据
虽然iframe能获取到data.html页面的数据,那a.html页面如何向iframe获取数据呢,直接获取?
但是a.html和iframe不同域,受同源策略的影响,我们无法直接获取,怎么办?
这时,聪明的你灵机一动,想着既然改变iframe页面location,该页面的window.name值不变,而且iframe.contentWindow代表iframe页面的window,此时的你默默的将iframe.contentWindow.href改为和a.html页面同源的,拿走数据后,带着莫名的笑意看我我们一群迷茫的愤青(O(∩_∩)O哈!)

a.html页面代码如下:

<script>
        function getData(url) {
            var iframe = document.createElement(‘iframe‘);
            iframe.style.display = "none";
            var state = 0;
            iframe.onload = function () {
                if(state === 1) {
                    var data = iframe.contentWindow.name;
                    console.log(data);
                    // 获取到数据后将隐藏的iframe去除
                    iframe.contentWindow.document.write(‘‘);
                    iframe.contentWindow.close();
                    document.removeChild(iframe);
                }else if(state === 0) {
                    state = 1;
                    iframe.contentWindow.location.href = window.location.href;
                }
            }

            iframe.src = url;
            document.body.appendChild(iframe);
        }
    </script>
 

参考

  1. http://www.cnblogs.com/zichi/p/4620656.html
  2. http://www.cnblogs.com/fliu/articles/5249130.html
时间: 2024-10-05 23:54:34

window.name跨域的相关文章

window.name 跨域

跨域的由来 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但是我们常常会遇到无法避免跨域的情况,如普通文章站点(article.xxx.com)需要评论,而评论站点却在cheat.xxx.com的情况. 跨域限制情况 在不同端口,不同协议,不同域名,域名和域名对应ip,主域相同,子域不同 都会产生同域限制,然而目前前端还无法解决,我们能解决的知识跨父域的情况(如上面说的article.xxx.com取得cheat.xxx.com). 跨域的方法有很多,本文就谈谈使用win

window.name跨域实现

参考:window.name实现的跨域数据传输 有三个页面: a.com/app.html:应用页面. a.com/proxy.html:代理文件,一般是一个没有任何内容的html文件,需要和应用页面在同一域下. b.com/data.html:应用页面需要获取数据的页面,可称为数据页面. 原理: a.com/app.html 中通过javascript创建iframe,并将location指向b.com/data.html, 并监听iframe的dom onload, 加载完毕后修改locat

利用window.name+iframe跨域获取数据详解

详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.iframe是html的一个标签,可以在网页中创建内联框架,有个src属性(指向文件地址,html.php等)可以选择内联框架的内容,可以看个例子(猛戳这里),大概了解下就行了.window.name(一般在js代码里出现)的值不是一个普通的全局变量,而是当前窗口的名字,这里要注意的是每个iframe都有包

解决Iframe跨域高度自适应,利用window.postMessage()实现跨域消息传递页面高度(JavaScript)

在iframe跨域引用高度自适应这块写的js方式都试了不管用,最终使用的是window.postMessage() 跨域获取高度 传递信息 1.首先,在主页面上使用iframe引入子页面:也就是A.html页面引入B.html页面,下面看看A.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head>

快速入门各种跨域

前言因为学习跨域需要配置本地服务器,可能会比较麻烦,所以自己根据网上的博客写了大多数跨域的简单demo,可以自己在`本地运行`,而且`不用配置服务器`.自己对于跨域的理解刚开始也仅仅在于网上的博客文章,通过写这些可以本地运行的demo让我对跨域有了更直面的理解,希望这些demo对你们有帮助,有错误的话欢迎指正,欢迎PR. github地址: https://github.com/FatDong1/cross-domain 多种跨域demo CROS跨域 JSONP跨域 postMessage跨域

前端跨域的那些事

这一节,我们来讲一讲,前端跨域的那些事,主要分成这样的几部分来讲解, 一.为什么要跨域? 二.常见的几种跨域与使用场景 2.1 JSONP跨域 2.2 iframe跨域 2.3 window.name 跨域 2.4 document.domain 跨域 2.5 cookie跨域 2.6 postMessage跨域 三.总结 一.为什么要跨域 跨域,通常情况下是说在两个不通过的域名下面无法进行正常的通信,或者说是无法获取其他域名下面的数据,这个主要的原因是,浏览器出于安全问题的考虑,采用了同源策略

JavaScript跨域

JavaScript跨域 js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同.这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作. URL 说明 是否允许通信 http://www.a.com/a.jsh

常用跨域方法实践(二)

本文承接 上一篇博文,上一篇博文介绍了跨域的相关概念.测试demo的相关配置和 JSONP 和 CORS 两种跨域方式的实现.本文主要介绍 document.domain . URL.hash . cross-fragment . window.name 和 postMessage 这五种方式的跨域实现. document.domain 如果 A 源和 B 源具有相同的父域名,通过设置 document.domain 属性,就很容易使其相互通信.在 HTML 规范中document.domain

js中各种跨域问题实战小结(二)

这里接上篇:js中各种跨域问题实战小结(一) 后面继续学习的过程中,对上面第一篇有稍作休整.下面继续第二部分: -->5.利用iframe和location.hash -->6.window.name跨域实现 利用iframe和location.hash实现跨域 想必有很多人像我之前一样,或许只知道上面文中所说的那几种方法.所以,我刚了解到可以用iframe和location.hash来实现跨域的时候,我会想,为什么他们可以实现.iframe是什么,有什么特性,location.hash是什么