Cookie从iframe javascript设置为父窗口

时间:2013-10-08 12:17:40

标签: javascript iframe cookies

请有人帮我在javascript中从iframe在父窗口上设置cookie。 如果可能,请提供一些相关的链接。 例如:父页面包含域 ABC.com

该页面上的IFRAME指向 XYZ.com ,我想在iframe中编写一个脚本,以便在ABC.com上删除一个cookie,即在父页面上。

2 个答案:

答案 0 :(得分:2)

您可以使用postMessage从子窗口(即iFrame)发布,然后在父级监听事件。

  window.parent.postMessage("Value", "*");
  window.addEventListener();

这篇文章可能会帮助您了解更多信息。 How do you use window.postMessage across domains?

答案 1 :(得分:2)

这是您的操作方式。

iFrame网站
将以下代码粘贴到iFrame网站中:

<script>

    /* Sends a hello from the iframe to the parent */    
    parent.postMessage('hello_from_the_iframe', 'https://parentwebsite.com/');

</script>

父网站
将以下代码粘贴到内嵌iFrame的父网站中以设置Cookie:

<script> 

    window.addEventListener("message",function (e) { 

            /*Check if the iframe website is sending the message*/
            if(e.origin === 'https://iframewebsite.com'){ 

                    /*Check if you got a hello from the iframe*/
                    if(e.data === 'hello_from_the_iframe'){

                        /*Function to set Cookie*/
                        function setCookie(cname, cvalue, exdays) {
                            var d = new Date();
                            d.setTime(d.getTime() + (exdays*24*60*60*1000));
                            var expires = "expires="+ d.toUTCString();
                            document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
                        }

                        /* Set the cookie 'set_my_cookie'*/
                        setCookie('set_my_cookie',1,365);

                        /* Get notification that the cookie is set*/
                        alert('cookie set');
                    }
            }
    },false);

</script>

您需要将https://parentwebsite.com/替换为嵌入iframe的网站的域。

您还需要用iFrame的原点替换https://iframewebsite.com。如果您不知道iFrame的来源,则只需将以下代码粘贴到iFrame HTML中,即可在警报框中将其显示给您。

<script>
    alert(window.location.origin);
</script>

希望这会有所帮助。