2012-01-17 7 views
0

J'ai une application Windows Store Windows qui héberge un iframe. La page Web à l'intérieur de mon iframe n'est pas au courant de mon application, elle n'a donc pas d'interface PostMessage avec mon application.Application Windows Store et cookie iFrame

L'iframe définit un cookie lorsque je me connecte à l'iframe. Mais dans mon application, je ne crois pas qu'il existe un moyen que je peux obtenir le cookie iframe. Est-ce correct?

Et si la page Web connaissait mon application? (c'est-à-dire que je peux changer la page Web dans l'iframe) Est-ce que j'utilise PostMessage?

+0

Le contenu iframe est-il distant ou local? –

+0

À distance, par exemple Apple.com. @TiagoAndradeSilva –

Répondre

0

Vous pouvez utiliser PostMessage pour que votre page principale reçoive le message.

Voici l'exemple de travail dans Win8 Developer Preview:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<meta name="viewport" content="width=1024, height=768" /> 
<title>WinWebApp1</title> 
<!-- WinJS references --> 
<link rel="stylesheet" href="/winjs/css/ui-dark.css" /> 
<script src="/winjs/js/base.js"></script> 
<script src="/winjs/js/wwaapp.js"></script> 
<script src="/winjs/js/ui.js"></script> 
<!-- WinWebApp3 references --> 
<link rel="stylesheet" href="/css/default.css" /> 
<script src="/js/default.js"></script> 
     <script type="text/javascript"> 

      window.attachEvent("onmessage", receiveMessage); 

      function receiveMessage(e) { 
       if (e.origin == "http://www.scrumpt.com") 
        document.getElementById("target-element-id").innerHTML = e.data; 

      } 
</script> 
</head> 
<body> 
    <iframe src="http://www.scrumpt.com/frametest2.html" style="display: block; width: 699px; height: 296.95px; left: -499px; top: 0px;"></iframe> 
<div data-win-control="WinJS.UI.ViewBox" style="display: block; top: 50%;"> 
     <div class="fixed-layout"> 
     <div id="target-element-id">Click on Send Message above</div> 
    </div> 
    </div> 
</body> 
</html> 

Sur le serveur (il est en direct à ce moment http://www.scrumpt.com/frametest2.html) vous avez:

<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript"> 
function send() { 
     parent.postMessage('hello world', '*'); 
} 
</script> 
</head> 
<body> 
<a href="javascript:send()">Send message</a> 
</body> 
</html> 

assurez-vous que votre div (» target-element-id ") a l'identifiant correct lorsque vous copiez le code ci-dessus. VS peut changer l'identifiant en "Div1" lors du collage.

+0

Merci beaucoup @TiagoAndradeSilva, mais dans ma question, j'ai fait remarquer que le "serveur" (en utilisant votre terminologie: P) n'est pas au courant de mon application, ce qui signifie qu'elle n'a pas cette configuration postMessage . C'est pourquoi je demande si c'est impossible. –

+0

La transmission de messages est une fonction client, c'est-à-dire qu'elle est entièrement supportée par le navigateur et vous pouvez l'utiliser pour permettre la communication entre les "composants" chargés par le navigateur (en plus des communications avec les trames). , vous n'avez besoin d'aucune configuration spéciale dans le serveur pour prendre en charge le passage de messages entre votre document et un iframe qui charge le contenu distant. La seule chose que je "changerais" est que j'appellerais probablement la méthode toStaticHtml pour nettoyer les données reçues avant de les passer à la propriété innerHTML. –

+0

Merci pour la réponse @LuisAbreu. Tout d'abord, c'est une application, pas une situation de navigateur. Deuxièmement, disons que nous sommes dans un navigateur, je pensais que la même politique d'origine s'appliquait ici, alors comment allez-vous pouvoir utiliser le cookie d'un autre domaine sans posterMessage? –

Questions connexes