2

在我的地铁应用程序中..我正在使用 iframe 加载一个 Web 应用程序 - 基本上是一个包含一些控件的表单,最后用户点击完成按钮,我想显示警报

我知道在地铁应用程序中。我们可以使用“new Windows.UI.PopupMessage”来显示警报。但是我怎样才能从网络上下文(Iframe)中做同样的事情。

我在我的 default.js 中有一个函数 (showalert();),我在其中使用“new Windows.UI.PopupMessage”来显示消息。如果我试图从 iframe 页面访问此功能,例如“window.parent.showalert();”。我得到异常说访问被拒绝。

请有人回复此问题,因为这对我来说非常重要。

谢谢和问候古瑟姆

4

1 回答 1

2

您可以使用 HTML 5 的postMessage在上下文之间进行通信。

下面是一个简单示例的图像,后面有相关的代码片段;Bing Maps 旅行优化器示例在更大范围内使用了相同的技术。

在本地上下文中运行的主页面(default.js)包括通过以下标记在 Web 上下文中加载的 IFRAME(我省略了未更改的 <head> 元素以节省空间):

<body onload="localContext.onLoad();">
   <p style="margin-top: 150px">This is default.html in the local context</p>

   <div style="background-color: azure; width: 300px">
       <iframe src="ms-appx-web:///webpage.html" />
   </div>
</body>

localContext在 default.js 中定义为

var localContext = {

    onLoad: function () {
        window.attachEvent("onmessage",
            function (msg) {
                if (msg.origin == "ms-appx-web://bfddc371-2040-4560-a61a-ec479ed996b0")
                    new Windows.UI.Popups.MessageDialog(msg.origin).showAsync().then();
            });
    }

};

它为 default.html 定义了一个onLoad函数,该函数注册了事件的侦听器onmessage,并且当该事件触发时,会显示MessageDialog(或者您可以在本地上下文中执行您想要执行的任何操作)。

请注意,message事件回调的参数(msg此处)还包括一个 origin 属性,您可以检查该属性以确保您只处理来自预期发件人的消息。

IFRAME 中托管的网页在按钮的事件处理程序中调用postMessageonclick(您可能希望将调用拉到单独的 .js 文件而不是内联文件)

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        This is webpage.html loaded into an iFrame
        <button id="button" onclick="window.parent.postMessage('Hello from Web Context', '*');">Say Hello</button>
    </body>
</html>
于 2012-10-11T05:29:51.743 回答