论坛首页 Web前端技术论坛

window.name 跨域

浏览 2777 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-03-18  

window.name跨域的基础是:iframe页面在其url改变的时候,不会改变name的数据,
从而通过proxy页面(与应用页面相同域名)的跳转,绕过跨域的限制。

name传输的数据,大小一般为2M,IE和firefox下可以大至32M左右。

<pre name="code" class="js">
CrossDomain  = {
// 设置的代理文件
proxy: 'http://shawn.a.com:1234/proxy.html',

/**
*@param {String} url 接口
*@param {Function} callback 回调函数,可选。
*/
getData: function(url,callback){
var state = 0,
iframe = document.createElement('iframe');
iframe.id = "CrossDomainIfrme";
function loadfn() {
    if (state === 1) {
                        // 读取数据
        callback &amp;&amp; callback(iframe.contentWindow.name);
        destroy();
    } else if (state === 0) {
        state = 1;
        iframe.contentWindow.location = CrossDomain.proxy;   
    } 
}
function destroy(){
iframe.contentWindow.document.write('');
    iframe.contentWindow.close();
    document.body.removeChild(iframe);
}
iframe.src = url;
if (iframe.attachEvent) {
    iframe.attachEvent('onload', loadfn);
} else {
    iframe.onload  = loadfn;
}
document.body.appendChild(iframe);
}

}
</pre>


proxy.html 只是一个空页面


<pre name="code" class="html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;meta charset="utf-8"&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;
</pre>


获取数据的接口,需要返回一个页面,例如:

<pre name="code" class="html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;&lt;meta charset="utf-8"&gt;
&lt;script&gt;
window.name = 'I set data!'; //这里把数据放到name里面
&lt;/script&gt;
&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;

</pre>
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics