• JS 使用window.name跨域实践 PHP


    看了园友的 window.name实现的跨域数据传输

    自己实践了一下,真的很好用。

    特将具体实现方法记录如下:

    如a.com网站想通过JS获取b.com网站的数据。

    1 在a.com网站添加一个空HTML页。名称为:http://a.com/null.html

    2 在a.com网站需要获取数据页面(如:http://a.com/getDomainData.html)内容如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>跨域获取数据</title>
        <script type="text/javascript">
        function domainData(url, fn)
        {
    		var isFirst = true;
    		var iframe = document.createElement('iframe');
    		iframe.style.display = 'none';
    		var loadfn = function(){
    			if(isFirst){
    				iframe.contentWindow.location = 'http://a.com/null.html';
    				isFirst = false;
    			} else {
    				fn(iframe.contentWindow.name);
    				iframe.contentWindow.document.write('');
    				iframe.contentWindow.close();
    				document.body.removeChild(iframe);
    				iframe.src = '';
    				iframe = null;
    			}
    		};
    		iframe.src = url;
    		if(iframe.attachEvent){
    			iframe.attachEvent('onload', loadfn);
    		} else {
    			iframe.onload = loadfn;
    		}
    	    
    		document.body.appendChild(iframe);
        }
        </script>
    </head>
    <body>
    
    </body>
        <script type="text/javascript">
        domainData('http://b.com/data.html', function(data){
    		alert(data);
        });
        </script>
    </html>
    

    3 在b.com中添加获取数据页面 如:http://b.com/data.html 内容需包含:

     

    <script>
      window.name = '需要跨域传递的数据';
    </script>
    

    4 访问 http://a.com/getDomainData.html 就可返回 http://b.com/data.html 中的window.name中的数据了。

    需要注意的地方

    null.html 是必须的。内容可为空。

     iframe的onload事件绑定 必须这样写:

    if(iframe.attachEvent){
    	 iframe.attachEvent('onload', loadfn);
    } else {
    	 iframe.onload = loadfn;
    }
    

    调用domainData函数必须在body后面,或页面加载完后。

    调用时会执行 http://b.com/data.html 页面的脚本。


    欢迎转载,转载请注明:转载自[ http://www.cnblogs.com/zjfree/ ]
  • 相关阅读:
    Linux系统教程:设置GRUB菜单密码
    vimdiff的常用命令
    Zero-Copy实现原理
    解决业务代码里的分布式事务一致性问题
    用好这6个APP,学英语SO EASY!
    线程池调优
    理解select,poll,epoll实现分析
    时序图
    性能监控-TP理解
    sshd_config OpenSSH SSH 进程配置文件配置说明
  • 原文地址:https://www.cnblogs.com/zjfree/p/1963591.html
Copyright © 2020-2023  润新知