2012-01-17 275 views
0

我有一个托管iframe的Javascript Windows应用商店应用程序。我的iframe中的网页不知道我的应用程序,所以它没有任何PostMessage接口到我的应用程序。当我登录'在iframeWindows商店应用程序和iFrame Cookie

的IFRAME将设置一个cookie。但在我的应用程序中,我不相信有一种方法可以获取iframe cookie。它是否正确?

如果网页知道我的应用程序是什么? (即我可以更改iframe中的网页)我是否使用PostMessage?

+0

iframe内容是远程还是本地? – 2012-01-17 21:49:31

+0

远程,说Apple.com。 @TiagoAndradeSilva – 2012-01-17 22:25:35

回答

0

您可以使用PostMessage你的主页将收到消息。

这里是工作在Win8的开发者预览版例如:

<!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> 

在服务器上(它是活在这一刻对http://www.scrumpt.com/frametest2.html),你必须:

<!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> 

确保您的DIV(” target-element-id“)具有正确的id,如果你复制粘贴上面的代码。 VS可能会在粘贴时将ID更改为“Div1”。

+0

非常感谢你@TiagoAndradeSilva,但在我的问题,我曾指出,“服务器”(使用您的术语:P)不知道我的应用程序,这意味着它是不是没有这个postMessage的设立。所以这就是为什么我问这是不可能的。 – 2012-01-18 01:28:53

+0

消息传递是一个客户端的功能,也就是说,它是完全通过浏览器支持,你可以用它来让浏览器加载“组件”之间的通信(除了与框架通信,消息也被用来允许与工人沟通)。所以, ,在服务器中不需要任何特殊配置就可以支持在文档和加载远程内容的iframe之间传递消息。 我唯一要改变的地方是我可能会调用toStaticHtml方法在接收到的数据传递给innerHTML属性之前清理接收到的数据。 – 2012-01-18 09:39:04

+0

感谢@LuisAbreu的回复。首先,这是一个应用程序,而不是浏览器的情况。其次,假设我们在浏览器中,我认为这里应用了相同的原产地策略,那么如何在不使用postsMessage的情况下使用其他域的cookie? – 2012-01-18 17:40:54