下面是对使用JavaScript的Bing Maps Trip Optimizer示例的介绍,讲述应用的JavaScript部分组织形式,本地的上下文和网络上下文之间的通信。

WinRT需要访问网络的代码,下面是一些需要访问网络的活动示例。

q 加载一个外部JavaScript文件,比如Bing Maps的AJAX控件。

q 加载外部CSS。

q 使用XmlHttpRequest。

Bing Maps Trip Optimizer将界面分为两个HTML文件,即“default.html”和“mapControl.html”,“default.html”属于local context(本地上下文),其可以引用WinRT(这个包括自定义C++的WinRT组件,不过不能访问网络),“default.html”表示应用的主页面。“mapControl.html”可称为web context(网络上下文),因为其可访问网络,但不能访问WinRT。“mapControl.html”是一个local context的内嵌框架。下图是local context和web context间的关系。

注意:就安全性而言,在一个单独的模块中维护web代码,同样会增加应用的安全性。可能的话有必要验证从web context接收到local context的内容,这样可以减少发生安全性缺陷的可能,比如缓冲区溢出。

接下来在local context中引用web context。local context(default.html)中body标签定义一个内嵌框架(iframe标签)来放置web context,代码如下。

<body οnlοad="OnLoad();" style="padding: 0; margin: 0; position: absolute; left: 0px;

width: 100%; top: 0px; height: 100%; overflow: hidden">

<iframe id="mapFrame" src="ms-appx-web:///mapControl.html"

style="position: absolute; left: 0px; width: 100%; top: 0px; height: 100%; overflow: hidden">

</iframe>

</body>

在JavaScript的Metro风格应用中引用代码文件时,使用这样的语法:src = "ms-appx-web://<package-name>/<file-name>" 。如果目标文件是和调用文件同一个包的一部分,可以在应用的manifest文件中找到包名。

再来说上下文间的通信。local context和web context使用跨文档信息通信,在上下文通信前,其必须首先注册通信事件。“default.html”和“mapControl.html”为body标签中的“onload”属性指定一个“OnLoad”函数,“OnLoad”函数调用“addEventListener”方法监听消息类型事件,并将这些消息路由发送到“receiveMessage”函数,代码如下。

function OnLoad() {

window.addEventListener("message", receiveMessage, false);

}

注意:Bing Maps Trip Optimizer使用跨文档消息传递,因为对一个上下文而言,其不能直接访问其他上下文的DOM。

在上下文注册了通信事件后,可以使用“postMessage”方法通信。这个方法发送一个跨文档消息,而消息是路由到消息事件处理函数。由于跨文档消息是基于文本的,应用和web上下文使用“JSON.stringify”函数将信息序列化到JSON文本中。当一个上下文收到一个消息时,它会调用“JSON.parse”函数将JSON文本字段反序列化。

为了说明上下文通信的方式,考虑让web context通信local context来初始化自定义C++的WinRT组件(回忆一下可以想到,web context不能直接和WinRT组件交互),web context(即mapControl.html)中定义的“OnLoad”函数在初始化期间被调用,对mapControl.html页面的部分代码如下。

function OnLoad() {

window.addEventListener("message", receiveMessage, false);

}

“OnLoad”函数调用“optimizerLoad”函数,“optimizerLoad”函数通信local context来初始化C++的WinRT组件,部分代码如下。

rho, iterations, parallel) {

var message = {

"invoke": "optimizeTrip", "locations": locations, "TravelMode": TravelMode, "Optimize": Optimize, "BingMapsKey": BingMapsKey,

"alpha": alpha, "beta": beta, "rho": rho, "iterations": iterations, "parallel": parallel

};

window.parent.postMessage(JSON.stringify(message), '*');

}

从web context,而不是直接从local context初始化WinRT组件的加载,这样确保web context和local context都在创建WinRT组件前被加载。

开发 Windows 8 Bing地图应用(2)相关推荐

  1. Windows Mobile引路蜂地图开发方案介绍

    1.引路蜂对不同开发者开发平台的支持 引路蜂平台开发支持:Java ME.LWUIT.Blackberry .Android.iOS.Windows Phone.桌面平台(Java SE, .Net ...

  2. Bing地图REST服务

    Bing Maps REST Services Bing地图REST服务 The Bing™ Maps REST Services Application Programming Interface ...

  3. SharePoint2010整合Silverlight 4应用——Bing地图控件

    本文中我们将展示如何在SharePoint 2010中集成Silverlight应用.例子中会用到Bing Map 控件.完成后的效果图如下: 开发环境 本例中,我们使用到的开发环境包括: 1.Vis ...

  4. 如何在Windows 10的地图应用程序中获取离线地图

    If you know you're going to be using your PC in a location without an Internet connection, and you n ...

  5. 开发Windows贪吃蛇游戏——(二)代码实现

    目录 前言 窗体部分 Frame部分 声明全局变量 Panel的初始化 startGame方法 paintComponent方法 drawGame方法 newSnake方法 newFood方法 mov ...

  6. 把google地图 和 Bing地图 无缝集合到 ArcMap中 —— ArcBruTile

    前一段时间听师兄说有个ArcMap的插件,可以在ArcMap中打开google 地图和Bing地图,而且是带准确坐标那种.于是试了一下,感觉很不错,果然能够在ArcMap中打开,插件装完后是一个工具条 ...

  7. Bing地图服务和API分类

    原文在此: https://docs.microsoft.com/en-us/bingmaps/?redirectedfrom=MSDN#pivot=main&panel=BingMapsAP ...

  8. 2021.3.1 百度测试开发实习面试–百度地图一面

    2021.3.1 百度测试开发实习面试–百度地图一面 自我介绍你能实习多长时间呢?因为你所投的是测试开发岗位,那说说你对测试的理解?你最熟悉的语言的是什么语言?Java的死锁是因为什么?内存泄露与内存 ...

  9. 解决VS2008 开发Windows Mobile 项目生成速度慢的问题

    EnjoyIt.Zwg 体验精细管理 享受工作乐趣 解决VS2008 开发Windows Mobile 项目生成速度慢的问题 最近用VS2008开发Windows Mobile程序,使用C#..NET ...

最新文章

  1. 领域模型中分散的事务如何集中统一处理(C#解决方案)
  2. 堡垒机的使用-及功能
  3. 二、用FTP同步服务器
  4. 使用 Pandas GUI 进行数据探索
  5. boost::hana::less_equal用法的测试程序
  6. gitlab-runner 安装使用
  7. opencv3.2.0 Cmake 3.8.0 + tdm-gcc-5.1.0-3
  8. 百度大脑公开课!快速定制高精度计算机视觉模型
  9. postMessage解决跨域问题
  10. vuex页面数据丢失_解决 vuex 中的数据在页面刷新之后就丢失的问题
  11. 【linux】Linux cp命令拷贝 不覆盖原有的文件
  12. 写一个c语言的链表记录一下
  13. spring cloud 搭建问题记录
  14. csdn 挣积分和c币方法指南
  15. GokeAudio是一款简约小巧的开源安卓SIP软电话客户端
  16. bootstrap3中使用bootstrap-datetimepicker日期插件的用法
  17. Excel、Word、PPT显示VB运行时错误53的解决办法
  18. 被多次定义,第一次再次定义
  19. ESD静电二极管端口信号防护应用产品型号——SM712
  20. 一张照片的启示:你的冷暖我知道!

热门文章

  1. mysql 索引 内存_mysql索引【第三篇】
  2. android arm 寄存器,ARM汇编
  3. 服务器本地文件,云服务器 本地文件
  4. 排球制作html,MAYA打造排球建模教程
  5. c语言递归求差分方程,如何使这个简单的递推关系(差分方程)尾递归?
  6. C语言(CED)输入一个任意长度的正整数,将该数逆序输出。
  7. IntelliJ IDEA关于logger的live template配置
  8. java 显示透明背景png图片
  9. 华为畅享max有没有人脸识别_华为畅享7s有人脸识别吗 让我来告诉你
  10. 3 5的二维数组C语言程序,C语言及程序设计提高例程-33 二维数组元素的引用