【发布时间】:2015-07-16 01:35:45
【问题描述】:
我正在加载不同域的 iFrame。父网站和 iFrame 网站都在我的控制之下。我正在使用 iFrame.postMessage 将消息发布到 iFrame。我通过 iFrame 加载的网站有一个 cookie(不是仅 http 的 cookie)。我需要在父站点中读取这个 cookie。
var opIFrame=document.getElementById('opIFrame').contentWindow;
/**
* periodically invoking the Endpoint at OP for every six seconds
*/
setInterval(function(){
console.log('Sending polling Request From RP Client ... ' + clientId);
document.all.opIFrame.src = endPoint;
opIFrame.postMessage(clientId,"https://localhost:9443/oauth2/loginstatus");
var session=getCookieValue("session_state");
console.log('**session**'+session);
},6000);
function getCookieValue(cookieName) {
var name = cookieName + "=";
var cookies =document.cookie.split(';');
if (!cookies) {
return null;
}
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].trim();
if (cookie.indexOf(name) == 0) {
return cookie.substring(name.length, cookie.length);
}
}
return null;
}
我使用上述方法读取cookie。但这并不成功。请在这方面给我建议。
更新代码:
<iframe id="opIFrame" style='visibility: hidden;' src=endpoint onload="getCookieValue('session_state')" >
</iframe>
<script>function getCookieValue(cookieName) {
console.log("=====getCookieValue=======");
var cookies = document.cookie;
console.log("=====ALL cookies======="+cookies);
}</script>
虽然我可以在浏览器中看到 cookie,但我得到的 cookie 数组为空。
【问题讨论】:
-
你是如何在父窗口监听消息事件的?
-
是的,马尼克。我已经添加了一个 eventListner 并监听响应。但问题在于访问 cookie。我正在通过侦听器从 iFrame 获取消息事件的响应。虽然我有一个名为“session_state”的 cookie,但在执行 getCookieValue(cookieName) 时我得到了 null。
-
请查看我更新的答案,您能解释一下您在 clientId 中发送的内容吗?我还看到您在读取 cookie 之前将消息发布到父窗口是故意的吗?
-
您做错了,您试图在无法访问的父窗口中读取 iframe 的 cookie,这是一种浏览器安全措施。只有创建 cookie 的域才能读取其 cookie。因此,您必须从 iframe 中读取 cookie,然后将其传递给父窗口。如果您无法访问或控制 iframe 中的页面,则无法获取 cookie 值。
-
对于这种情况,我只有一个解决方案 - “不可能”。
标签: javascript iframe cookies