iframe跨域问题

时间:2012-12-25 06:47:02

标签: javascript jquery iframe cross-domain

我希望每隔几秒钟就将一条消息从iframe传递到父页面,如:

Iframe Domain = www.abc.com
Parent Domain = www.xyz.com

请检查:

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我最近刚刚帮助了另一个非常相似的人,在IFrame之间传递消息。 (见Issues with Cross Document Messaging between IFrame & Parent)。

在上述主题中使用我从 suamikim 借用的代码的修改版本,我已经集成了一个计时器。这应该是一个很好的起点。这些父和子html页面将按照 Amadan 上述评论中的说明跨域工作。我刚刚测试并确认了它,将 parent.html 放在一个域上,该域指向 child.html 在一个完全独立的不受信任的域名上。

<强> parent.html

<html>
<head>
    <script type="text/javascript">
        function parentInitialize() {
            var count = 0;
            window.addEventListener('message', function (e) {
                // Check message origin etc...
                if (e.data.type === 'iFrameRequest') {
                    var obj = {
                        type: 'parentResponse',
                        responseData: 'Response #' + count++
                    };
                    e.source.postMessage(obj, '*');
                }
                // ...
            })
		}
    </script>
</head>
<body style="background-color: rgb(72, 222, 218);" onload="javascript: parentInitialize();">
    <iframe src="child.html" style="width: 500px; height:350px;"></iframe>
</body>
</html>

<强> child.html

<html>
<head>
    <script type="text/javascript">
        function childInitialize() {
            // ...

            try {
                if (window.self === window.top) {
                    // We're not inside an IFrame, don't do anything...
                    return;
                }
            } catch (e) {
                // Browsers can block access to window.top due to same origin policy.
                // See https://stackoverflow.com/a/326076
                // If this happens, we are inside an IFrame...
            }

            function messageHandler(e) {
                if (e.data && (e.data.type === 'parentResponse')) {
                    // Do some stuff with the sent data
                    var obj = document.getElementById("status");
                    obj.value = e.data.responseData;
                }
            }

            window.addEventListener('message', messageHandler, false);

            setInterval(function () {
                window.parent.postMessage({ type: 'iFrameRequest' }, '*');
            }, 1000);
            // ...
        }
    </script>
</head>
<body style="background-color: rgb(0, 148, 255);" onload="javascript: childInitialize();">
    <textarea type="text" style="width:400px; height:250px;" id="status" />
</body>
</html>

祝你好运!