Accéder aux cookies d'un iFrame dans la fenêtre parent
Je suis du chargement d'une iFrame d'un domaine différent. À la fois le parent et l'iFrame sites sont sous mon contrôle. Je suis à l'aide d'une iFrame.postMessage de poster des messages de l'iFrame. Le site dont je suis le chargement par le biais de l'iFrame a un cookie(pas uniquement http cookie). J'ai besoin de lire ce cookie à l'intérieur du site parent.
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;
}
J'ai utilisé les méthodes ci-dessus pour lire le cookie. Mais il n'a pas réussi. Merci de me conseiller sur ce.
Code Mis À Jour:
<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>
Je suis de tableau vide pour les cookies, même si je vois les cookies dans mon navigateur.
Comment écoutez-vous à l'événement de message sur la fenêtre parent?
Oui Manik. J'ai déjà ajouté une eventListner et d'écouter la réponse. Mais le problème est de l'accès au cookie. Je reçois la réponse de l'iFrame sur le message de l'événement par le biais de l'auditeur. Si j'ai un cookie nommé "session_state" je suis nulle lors de l'exécution de la getCookieValue(cookieName).
Merci de voir mon jour de réponse et pouvez-vous expliquer ce que vous envoyez dans clientId ? Aussi je vois que tu postes le message de la fenêtre parent avant de le lire, de le cookie est-ce intentionnel?
Vous le faites mal, vous essayez de lire les témoins de l'iframe dans la fenêtre parent qui n'est pas accessible, c'est un navigateur de mesure de sécurité. Seul le domaine qui a créé le cookie est susceptible de lire son cookie. Donc, vous devez lire le cookie de l'intérieur de l'iframe et puis la passer à la fenêtre parent. Si vous n'avez pas accès ou contrôle sur la page dans l'iframe alors il n'y a aucun moyen d'obtenir la valeur du cookie.
Pour ce cas, je n'ai qu'une solution pour vous - "Il n'Est Pas Possible".
Oui Manik. J'ai déjà ajouté une eventListner et d'écouter la réponse. Mais le problème est de l'accès au cookie. Je reçois la réponse de l'iFrame sur le message de l'événement par le biais de l'auditeur. Si j'ai un cookie nommé "session_state" je suis nulle lors de l'exécution de la getCookieValue(cookieName).
Merci de voir mon jour de réponse et pouvez-vous expliquer ce que vous envoyez dans clientId ? Aussi je vois que tu postes le message de la fenêtre parent avant de le lire, de le cookie est-ce intentionnel?
Vous le faites mal, vous essayez de lire les témoins de l'iframe dans la fenêtre parent qui n'est pas accessible, c'est un navigateur de mesure de sécurité. Seul le domaine qui a créé le cookie est susceptible de lire son cookie. Donc, vous devez lire le cookie de l'intérieur de l'iframe et puis la passer à la fenêtre parent. Si vous n'avez pas accès ou contrôle sur la page dans l'iframe alors il n'y a aucun moyen d'obtenir la valeur du cookie.
Pour ce cas, je n'ai qu'une solution pour vous - "Il n'Est Pas Possible".
OriginalL'auteur Hasanthi | 2015-05-06
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas comment en êtes-vous de les attraper, les postMessage sur la fenêtre parent ou même d'attraper ou pas, mais ci-dessous le code que vous devriez avoir sur la fenêtre parent pour attraper le postMessage de l'enfant iframe-
Mise à JOUR:
J'ai répliqué votre scénario à ma fin et constaté que vous pouvez utiliser-
au lieu de
Code Complet
De La Fenêtre Parent: - http://localhost:8541
iFrame Page: - http://localhost:50761
Dans le code ci-dessus vous pouvez voir que je suis accédant à la valeur du cookie en croix domaine de l'environnement c'est à dire de la fenêtre parent est en cours d'exécution sur différents domaine et de chargement d'une page dans un iframe est en cours d'exécution sur différents domaine.
J'ai créé un cookie de test avec des données de test et l'a transmis à la fenêtre parent à l'aide de postMessage.
J'ai juste besoin de passer une chaîne de caractères comme l'id du client. Dans le code que j'ai présenté le message à transmettre le message de l'iframe, c'est de ne pas le parent. J'ai malencontreusement mis opIFrame.postMessage au lieu de document. Je l'ai changé. Mais je ne peux pas accéder aux cookies dans l'iframe à l'aide de la mère.
Vous pouvez seulement de lire le cookie de l'iframe dans le même iframe seulement et après lecture, vous pouvez passer à la valeur du cookie à la fenêtre parent à l'aide de la postMessage. Je peux poster le code pour cette option si vous souhaitez voir.
oui, merci de poster le code si vous le pouvez.
Je l'ai essayé en appelant le getCookieValue fonction iFrame charge. Mais je ne pouvais pas accéder au cookie. Merci de mettre le code si vous le pouvez. J'ai mis à jour la question avec mon nouveau code.
OriginalL'auteur Manik Arora
Ici est plus simple solution:
Cela vous donnera le cookie de l'iframe:
À obtenir un cookie par l'utilisation du nom de cette fonction (de stackoverflow):
OriginalL'auteur dsharew