解决方案 »

  1.   

    Unsafe JavaScript attempt to access frame with URL 
    底层的网络协议决定了,跨域操作是不可能的。
    如果可能,我iframe 一个网银页面,别人输入的用户名和密码我不是就得到了?
      

  2.   

    针对你的例子,你可以在b域名上传后,通过网址跳转(或者在页内用代码post)到一个a网站服务器上的地址。
    这个和我们网上支付的流程是一样的,在银行/支付宝网关完成支付后,跳转回发起请求的商户,以便把支付结果通知商户的程序。
      

  3.   

    a.html是需要被动接受这个数据的,不知道怎么实现
      

  4.   

    但是b服务器现在是我可以控制的,而且现在已经将数据传递到c.html了,剩下的问题就是如何从c.html传递到a.html
      

  5.   

    跨域的话,a.html 只能主动检查不过两个服务器不都是你的吗?为什么要做成两个域呢
      

  6.   

    parent.parent.document.getElementById,应该是可以操作的,我之前有一个子页面操作父级页面iframe高度的例子,跟你这个比较类似吧,因为你c.html是跟a.html同一个域名的,所以c.html应该是可以操作a.html的内容。我的思路是:建议你不要在c.html中用定时器监测hash变化,你可以在b.html中操作完毕后,先删除src为c.html的iframe,完后再重新创建一个iframe,src为c.html,完后通过c.html中的js控制a.html中的内容,比如你可以把值放到a.html中的hidden的input标签里。我觉得这应该是能够做到的。附上我之前做的跨域调节iframe高度的例子,(前提是必须有两个域名下的文件管理权限)
    http://blog.csdn.net/ivyandrich/article/details/24372909
      

  7.   


    是的,现在是已经可以在 c.html中接受到b.php中传递的值了,c.html 和a.html现在在同一域下了,现在c.html怎么把值传递给a.html呢?
      

  8.   


    不能通过parent.parent操作a.html已经试过了
      

  9.   

    你可以在b.html中操作完毕后,先删除src为c.html的iframe,完后再重新创建一个iframe,src为c.html,这是什么意思这样操作
      

  10.   

    同源策略是不可破的,所以你只能想办法避开,
        大概思路是 b.php中iframe加载一个与a.html同域的页面,假设是a1.html,这样a1.html中通过paren.parent可以访问到a.html的window对象,而且注意a1.html与a.html之间是没有跨域的,所以a1.html是可以操作a.html的,那么剩下的就简单了,b.php想操作a.html时只需要设置iframe的src为a1.html,并传递url参数,a1.html获得参数并调用a.html中的函数,传递参数,这样就完成了b.php对a.html的操作并传递了参数。
    这就是经典的iframe跨域方式,兼容各浏览器
      

  11.   

    现在的问题就是 parent.parent访问不到a.html...
      

  12.   

    现在的问题就是 parent.parent访问不到a.html...

    你可以另外写个独立的demo测试,你这个看错误信息说的是c.html与a.html还是不同域,但顶级域名相同(就是仅域名的后半截相同),所以需要设置document.domain
      

  13.   

    举个例子:我这个应用是在A域名下的一个页面a.html中有个iframe,src为B域名下的b.html,因为b.html的内容高度会比a.html中初始设置的iframe高度要高一些,所以希望在b.html加载完毕后能自动调节iframe的高度。实现方法:http://www.b.com/B.html 加载完毕后,计算高度同时通过hash传给http://www.a.com/setHeight.html
    ,完后在http://www.a.com/setHeight.html中通过parent.parent.document.getElementById去控制http://www.a.com/a.html里的iframe的高度
    我是这么做的:
    A.html   所在域名  www.a.com
    <!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>  
        <meta content="text/html; charset=gb2312" http-equiv="Content-Type">  
    </head>  
        <body>  
        <iframe height='200px' id='iframe1' src="http://www.b.com/B.html"></iframe>  
    </body>  
    </html> 
    B.html     所在域名  www.b.com    <!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>  
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
        </head>  
        <body style="background-color:#ccc">  
            <div style="height:600px;">sdfsfsssfsfs</div>  
            <script>  
                window.onload = function()
    {
                            //先判断iframe是否存在,存在的话,删除掉先
    if(document.getElementById("sheight"))
    {
    document.body.removeChild(document.getElementById("sheight"));
    }
    var iframe = document.createElement("iframe");
    iframe.width='0px';
    iframe.height='0px';
    iframe.id='sheight';
    var currentheight = document.body.scrollHeight;
    iframe.src='http://www.a.com/setHeight.html#'+currentheight;
    document.body.appendChild(iframe);
    }  
            </script>  
        </body>  
        </html>  setHeight.html是和a.html同一个域名下的  www.a.com
    <!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>  
        <meta content="text/html; charset=gb2312" http-equiv="Content-Type">  
    </head>  
        <body>  
            <div></div>  
            <script type="text/javascript">  
                window.onload = function()  
                {  
                    var b_iframe = parent.parent.document.getElementById("iframe1");  
                    var hash_url = window.location.hash.split("#");  
                    var hash_height = hash_url[1]+"px";  
                    b_iframe.style.height = hash_height;  
                }  
            </script>  
        </body>  
    </html> 
      

  14.   

    现在的问题就是 parent.parent访问不到a.html...

    你可以另外写个独立的demo测试,你这个看错误信息说的是c.html与a.html还是不同域,但顶级域名相同(就是仅域名的后半截相同),所以需要设置document.domain现在没有用域名 两台机器都是 ip
      

  15.   

    Unsafe JavaScript attempt to access frame with URL http://172.18.88.4/lszfw/e/admin/up/parent.html from frame with URL http://172.18.88.4/lszfw/e/admin/up/agent.html#path=http://172.18.88.104:81/test3/2014-04-25/61.jpg. The frame being accessed set 'document.domain' to '172.18.88.4', but the frame requesting access did not. Both must set 'document.domain' to the same value to allow access.
    单独进行测试 咋还是不行
      

  16.   

    那就用在session中放一个属性,a.html通过ajax不停刷那个属性,什么时候发生变化了就做出对应的操作。c.html就负责改动那个属性。
      

  17.   

    https://github.com/biqing/MessengerJS
    去看看吧 aralejs/messenger就是根据他实现的,上面介绍的也很详细
      

  18.   

    貌似这个就是我当年遇到的一个问题吧,http://blog.csdn.net/dengqibin/article/details/6182031
    可以去看看