开发 Windows 8 Bing地图应用(2)

下面是对使用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间的关系。

clip_image001[4]

注意:就安全性而言,在一个单独的模块中维护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组件前被加载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http协议知识msdn

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Protocol_upgrade_mechanism

使用bash编写Linux shell脚本--复合命令

来源&#xff1a;http://blog.csdn.net/fox_lht/article/details/5897336 除了最简单的脚本&#xff0c;你很少想要执行每一个命令。执行一组命令或者重复执行一组命令若干次比执行单个命令更加有助。复合命令是将命令封装在一组其他命令中。 从可读性来说&#xff0c;封装后的…

简明Linux命令行笔记:finger

用来显示用户的相关信息 finger [options] [user-list] finger用来显示用户名、用户全名、终端设备号和登录时间等信息 options用来控制finger的显示内容&#xff0c;user-list用来指定finger要显示的用户列表 finger可以在被地系统和远程系统上检索信息 参数 不带任何参数时&a…

逻辑右移和算术右移区别

逻辑右移就是不考虑符号位&#xff0c;右移一位&#xff0c;左边补零即可。 算术右移需要考虑符号位&#xff0c;右移一位&#xff0c;若符号位为1&#xff0c;就在左边补1,&#xff1b;否则&#xff0c;就补0。 所以算术右移也可以进行有符号位的除法&#xff0c;右移,n位就…

再谈C#委托与事件

转自&#xff1a;http://ruizhinet.blog.163.com/blog/static/9921382820092801032681/ 之前写过一篇关于C#委托与事件的文章&#xff08;见《C#委托和事件例析》&#xff09;&#xff0c;不过还是收到一些网友的提问。所以&#xff0c;今天再换另一个角度来详解一下这个问题。…

2021年软考中级过关

虽然分数不高&#xff0c;但足以证明&#xff0c;付出总有回报。 个人感觉在软考中级里面来讲&#xff0c;软件设计师历年的通过率在30%左右&#xff0c;根据通过率可以判断考试难度不是很大。 软件设计师考试属于软考中级资格&#xff0c;软件设计师比软考高级考试难度要小&…

软件工程文档

软件工程文档 文档是软件开发使用和维护当中必备的资料&#xff0c;文档主要是管理人员、开发人员、操作人员、用户人员之间进行协商沟通的桥梁。 1.可行性分析文档 主要是说明软件在经济上&#xff0c;技术上和市场情景等方面的可行性。根据这个文档&#xff0c;公司判断软件能…

关于map对key自定义排序

map对key默认是从小到大排序 也可以自定义排序 #include <iostream> #include <map> #include <string> // 定义自己std::map比较器 template<class _Ty> struct PLess { // functor for operator< bool operator()(const _Ty& pLef…

openssl1.1.1ARM双编译

32位的机器&#xff0c;编译法 setarch i386 ./Configure linux-generic32 no-asm shared no-async --prefix/usr/local/openssl1.1.1q CCarm-linux-gnueabihf-gcc ./ ./Configure linux-generic32 no-asm shared no-async --prefix/usr/local/openssl1.1.1q CCarm-linu…

fatal error C1010: unexpected end of file while...

为什么80%的码农都做不了架构师&#xff1f;>>> 在编译VC6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive 的错误. 解决方法&#xff1a; 1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引…

CMake编译 oss -cpp-sdk arm列子

一&#xff1a;声明 请用自带的交叉编译器编译&#xff0c;openssl curl也要交叉编译 1:编译arm.cmake文件 cmake_minimum_required( VERSION 2.6.3 ) if( DEFINED CMAKE_CROSSCOMPILING ) # subsequent toolchain loading is not really needed message("DEFINED CMA…

jQuery css

jQuery css模块用于css属性的修改操作。 jQuery.fn.css jQuery.fn.css function( name, value ) {//又是用access来操作return jQuery.access( this, function( elem, name, value ) {var styles, len,map {},i 0;//如果name是数组if ( jQuery.isArray( name ) ) {//通过get…

OpenGL 人物走动源码

2019独角兽企业重金招聘Python工程师标准>>> OpenGL 人物走动源码&#xff0c;记得前两天发了一个OpenGL的立方体程序&#xff0c;这个比那个厉害&#xff0c;这个是一个可以走动的小怪兽&#xff01; 转载:http://www.adobex.com/android/source/details/00000064.…

在Hyper-v中创建并安装虚拟机

1.1.1 创建并安装虚拟机 创建并安装虚拟机系统的步骤&#xff1a; 1. 点击“开始”“程序”“管理工具”“Hyper-V 管理器”。 2. 如图点击“新建”“虚拟机”。 3. 在出现的开始之前对话框&#xff0c;点击“下一步”。 4. 在指定名称和位置对话框&#xff0c;输入名称&#x…

《算法导论》读书笔记之第1章 算法在计算机中的作用

本章是本书的开篇&#xff0c;介绍了什么是算法&#xff0c;为什么要学习算法&#xff0c;算法在计算机中的地位及作用。 算法&#xff08;algorithm&#xff09;简单来说就是定义良好的计算机过程&#xff0c;它取一个或一组值作为输入&#xff0c;并产生出一个或一组值作为输…

ubuntu部署tomcat

安装版本&#xff1a;apache-tomcat-7.0.29.tar.gz&#xff08;官方网址&#xff1a;Apache Tomcat&#xff09; 安装步骤&#xff1a; 1、下载 Tomcat 下载 apache-tomcat-7.0.29.tar.gz&#xff08;官方网址&#xff09; 2、解压 Tomcat 解压 apache-tomcat-7.0.29.tar.gz ta…

android 底部菜单

2019独角兽企业重金招聘Python工程师标准>>> 新浪微薄上的一个底部菜单的实现,有兴趣的 可以看一下转载:http://www.adobex.com/android/source/details/00000118.htm 转载于:https://my.oschina.net/androidcode/blog/103835

reposurgeon 2.15 发布

reposurgeon 2.15 改成 cvs-fast-export 用于读取 RCS 和 CVS 集合&#xff0c;在效率上也有一些改进&#xff0c;并对代码进行了清理。 reposurgeon是一种工具,用于编辑版本控制存储库的历史。它允许你做一些版本控制不允许你做的操作&#xff0c;比如编辑过去的评论和元数据、…

PullToRefresh

2019独角兽企业重金招聘Python工程师标准>>> 实现下拉刷新列表内容的效果。 Code4App编译测试&#xff0c;测试环境&#xff1a;Xcode 4.3, iOS 5.0。 转载:http://www.adobex.com/ios/source/details/00000062.htm 转载于:https://my.oschina.net/u/868244/blog/10…

LYNC文件传输功能开关

LYNC如何关闭和开启文件传输功能&#xff1f;大家都知道有文件筛选的控制&#xff0c;在POWERSHELL也没有看到关闭文件传输的命令。其实这个功能在控制台上一个不显眼的位置&#xff0c;见下图&#xff1a; 此处的勾用来控制客户端上的附件图标&#xff0c;需要重新启动客户端才…