PunCha

导航

Local 和 Web Contexts的学习

Programming Windows 8 Apps with HTML, CSS and JavaScript 2Ed 77页:

1. Metro 应用的主页(就是启动后的第一屏)总是运行在Local Context下的,而且通过<a href>标记或者document.location要转到的其他页面的必须也是在Local Context 下的。但是内嵌的iframe的页面,可以使Local的也可以是Web Context的。

2. 一个Web Context的页面,只能内嵌Web Context 的iFrame。

所以,作者有了如下总结:

假如源页面是Local Context的,那么

  • <iframe src="ms-appx:///" 这个是合法的,因为Local Context里面允许2种类型的iFrame。
  • <iframe src="ms-appx-web:///" 这个是合法的,因为Local Context里面允许2种类型的iFrame。
  • <iframe src="http[s]://" 这个是合法的,因为Local Context里面允许2种类型的iFrame。
  • <a href="[someURL]" target="myFrame"> <iframe name="myFrame"> 这个是合法的,因为Local Context里面允许2种类型的iFrame。
  • <a href="ms-appx:///"> 这个是合法的,因为Local Context里面允许Local Context的直接Navigation。
  • <a href="ms-appx-web:///"> 这个是不合法的,因为Local Context里面不允许Web Context的直接Navigation。
  • <a href="[remoteURL]"> 这个没有合不合法一说,因为目标页面是外部页面,即不是以ms-appx开头的,所以Metro应用会打开浏览器显示目标页面。

假如源页面是Web Context的,那么

  • <iframe src="ms-appx:///" 这个是不合法的,因为Web Context里面不允许Local Context的iFrame。
  • <iframe src="ms-appx-web:///" 这个是合法的,因为Web Context里面允许Web Context的iFrame。
  • <iframe src="http[s]://" 这个是合法的,因为Web Context里面允许Web Context的iFrame。
  • <a href="[someURL]" target="myFrame"> <iframe name="myFrame"> 这个是合法的只要URL是ms-appx-web开头。
  • <a href="ms-appx:///"> 这个是不合法的,因为Web Context里面不允许Local Context的直接Navigation,但是你可以通过调用MSApp.addPublicLocalApplicationUri("ms-appx:///frame-local.html");解决。
  • <a href="ms-appx-web:///"> 这个是合法的,因为Web Context里面允许Web Context的直接Navigation。
  • <a href="[remoteURL]"> 这个没有合不合法一说,因为目标页面是外部页面,即不是以ms-appx开头的,所以Metro应用会打开浏览器显示目标页面。

除此之外,Web Context的页面是无权使用Broker对象的(照相机啊,GeoLocation啊),微软这么设计的原因就是他认为Web Context是不安全的,因为他们可以随意导航到外部页面。你只有手动的把他们加到信任列表里面才行。



posted on 2012-11-10 16:23  PunCha  阅读(208)  评论(0编辑  收藏  举报