Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Windows应用商店应用程序和iFrame cookie_Javascript_Cookies_Windows 8_Windows Store Apps - Fatal编程技术网

Javascript Windows应用商店应用程序和iFrame cookie

Javascript Windows应用商店应用程序和iFrame cookie,javascript,cookies,windows-8,windows-store-apps,Javascript,Cookies,Windows 8,Windows Store Apps,我有一个承载iframe的Javascript Windows应用商店应用程序。iframe中的网页不知道我的应用程序,因此它没有任何与我的应用程序相关的PostMessage界面 当我在iframe中“登录”时,iframe将设置cookie。但在我的应用程序中,我不相信有一种方法可以获得iframe cookie。这是正确的吗 如果网页知道我的应用程序怎么办?(即,我可以在iframe中更改网页)我是否使用PostMessage?您可以使用此选项,您的主页将接收消息 以下是Win8开发者预览

我有一个承载iframe的Javascript Windows应用商店应用程序。iframe中的网页不知道我的应用程序,因此它没有任何与我的应用程序相关的
PostMessage
界面

当我在iframe中“登录”时,iframe将设置cookie。但在我的应用程序中,我不相信有一种方法可以获得iframe cookie。这是正确的吗

如果网页知道我的应用程序怎么办?(即,我可以在iframe中更改网页)我是否使用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>

WinWebApp1
attachEvent(“onmessage”,receiveMessage);
函数接收消息(e){
如果(例如,原点=”http://www.scrumpt.com")
document.getElementById(“目标元素id”).innerHTML=e.data;
}
点击上面的发送消息
在服务器上(此时处于活动状态),您有:

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

函数send(){
parent.postMessage('helloworld','*');
}

如果复制粘贴上述代码,请确保您的div(“目标元素id”)具有正确的id。VS可能会在粘贴时将id更改为“Div1”。

iframe内容是远程的还是本地的?例如Apple.com@TiagoAndradeSilva非常感谢您@TiagoAndradeSilva,但在我的问题中,我指出“服务器”(使用您的术语:P)不知道我的应用程序,这意味着它没有设置此postMessage。这就是为什么我要问这是否是不可能的。消息传递是一种客户端功能,即浏览器完全支持它,您可以使用它来允许浏览器加载的“组件”之间的通信(除了与帧通信外,消息还用于允许与工作人员通信)。因此,您不需要在服务器中进行任何特殊配置来支持文档和加载远程内容的iframe之间的消息传递。我唯一想“改变”的是,在将接收到的数据传递给innerHTML属性之前,我可能会调用toStaticHtml方法来清理接收到的数据。首先,这是一个应用程序,而不是浏览器。第二,假设我们在浏览器中,我认为这里应用了同源策略,那么您如何能够在不发布消息的情况下使用其他域的cookie?RFC 2109指定cookie上的域设置必须有两个句点。因此,Metro应用程序将无法读取cookie,尽管您在设置cookie时在“域”中进行了设置。所以你是对的。您不能使用Cookie与Metro应用程序共享来自Web的信息。