2012-01-17 273 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