首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML5跨域通信无法工作。

HTML5跨域通信无法工作。
EN

Stack Overflow用户
提问于 2013-01-25 16:53:03
回答 3查看 1.5K关注 0票数 2

我以http://127.0.0.1/1.html的形式打开1.htm

1.html

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>

    </head>
    <body>
       <iframe   id="ifr" src="http://localhost/2.html" width="100%" height="300">
       </iframe>       
        <script>  
            iframe=document.getElementById("ifr");
            iframe.contentWindow.postMessage("hello there", "http://localhost");
     </script>  
    </body> 
    </html>

2.html

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
 <script>
    window.addEventListener("message", function(event) {

    alert(hi);
        if (event.data === "hello there" ) {
            alert("Hi" + event.origin);
        }
    }, false );
</script>

<head>
<body>
Hello world
</body>

代码语言:javascript
复制
but I have that error: "Unable to post message to   http://localhost. Recipient has origin  http://127.0.0.1/ 

这是一个简单的例子。最后,我需要这样的结构:在域"A“上,我有iframe,它的src是域"B”的页面。如果是的话,里面有按钮。当我点击显示在iframe中的那个按钮时,我需要调用域的window.addEventListener "A“,我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2013-01-25 17:21:48

正如所描述的here。你只有以下选择。

相同或不同领域场景之间的通信:

代码语言:javascript
复制
 +-------------------------+-----------+-------------+-------------+
 |                         | home.html | framed.html | helper.html |
 +-------------------------+-----------+-------------+-------------+
 | www.foo.com/home.html   |    N/A    |     YES     |     YES     |
 | www.bar.net/framed.html |    NO     |     N/A     |     YES     |
 | www.foo.com/helper.html |    YES    |     YES     |     N/A     |
 +-------------------------+-----------+-------------+-------------+

这纯粹是对CSRF (跨站点请求伪造)攻击的浏览器限制。看看你的简历,就连你也在同一领域工作。一种选择是遵循上面的层次结构示例,您可以在页面之间传递消息,甚至可以使用父站点上的助手页在相同或不同的域中传递消息。然后,孩子可以通过这个帮助页面接收和发送消息。

票数 2
EN

Stack Overflow用户

发布于 2013-01-25 17:15:27

检查您的主机文件(C:\Windows\System32 32\drivers\etc),确保您没有将localhost映射为其他任何内容。

注意,通过Javascript访问父帧不是这样的,因为这会带来安全问题(跨站点脚本)。

票数 1
EN

Stack Overflow用户

发布于 2013-01-30 10:38:54

解决办法如下:

代码语言:javascript
复制
<iframe id="frameId" src="http://b.net/2.html"  onload="sendCommand();">  No Frame!</iframe>

            <script  type="text/javascript"> 
                    function sendCommand() {
                    var receiver;
                    receiver = document.getElementById('frameId').contentWindow;
                    receiver.postMessage(receiver, 'http://b.net');
                    }
            </script>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14526542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档