您可以使用 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>