- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用JavaScript制作游戏,目前正在使用window.location = "somepage.html"
进行导航,但是我不确定这是否是正确的方法。正如我在标题中所说,我选择了空白应用模板,因此我没有任何navigator.js
或类似内容。
你们能告诉我最好的方法吗?
最佳答案
尽管您可以使用window.location进行导航,但是我敢肯定您已经注意到了一些缺点:
页面之间的过渡通过黑屏,这是底层HTML呈现引擎如何工作的产物。
您在页面之间丢失了脚本上下文,例如您没有任何共享变量或命名空间,除非您使用HTML5会话存储(或WinRT应用数据)。
很难连接后退按钮,例如您必须确保每个目标页面都知道导航到哪个页面,然后在会话存储中维护后退堆栈。
由于这些原因,WinJS + navigator.js创建了一种通过DOM替换来执行“页面”的方法,这与“单页面Web应用程序”所使用的策略相同。也就是说,您在default.html中有一个div,您可以在其中加载卸载DOM片段以显示页面导航的外观,而实际上您从未离开过default.html的原始脚本上下文。结果,所有的内存变量都将在所有页面导航中保留。
机制如下:WinJS.Navigation提供了一个用于管理导航和后退堆栈的API。但是,它本身所做的只是管理一个后堆栈数组并触发与导航有关的事件。要进行DOM替换,必须监听某些事件。
这些监听器是navigator.js实现的,因此您可以为此目的将这部分代码插入任何项目中。 Navigator.js还实现了一个称为PageControlNavigator的自定义控件(通常是Application.PageControlNavigator),该控件实现了侦听器。
这就剩下了如何定义“页面”的技巧。这就是WinJS.UI.Pages API的用途,并且navigator.js假定您已经以这种方式定义了页面。 (从技术上讲,您可以为此定义自己的页面机制,也许使用低级WinJS.UI.Fragments API甚至从头开始实现。但是WinJS.UI.Pages的出现是因为解决此问题的每个人基本上都提出了相同的解决方案,因此WinJS团队提供了一种所有人都可以使用的实现。)
然后放在一起:
您将每个页面定义为WinJS.UI.Pages.PageControl的实例,其中每个页面由其HTML文件(可以加载其自己的JS和CSS文件)标识。 JS文件包含页面方法(如ready)的实现,您可以在其中执行初始化工作。然后,您可以构建所需的任何其他对象结构。
在default.html中,为页面呈现的“主机容器”定义一个div。这是navigator.js中定义的PageControlNavigator类的实例。在其数据双赢选项中,为加载的初始页面指定“ {home:}”。
每当您要切换到另一个页面时,请使用目标页面的标识符(即其.html文件的路径)调用WinJS.Navigation.navigate。作为响应,它将触发一些导航事件。
作为响应,这些事件的PageControlNavigator的处理程序会将目标页面的HTML加载到DOM中,该文件位于default.html中其div中。然后它将卸载上一页的DOM。当所有这些都呈现后,您会看到页面过渡以及平滑的页面过渡,因为我们可以对内容进行动画处理,而不必经过黑屏。
在此过程中,将调用前一个页面控件的unload方法,并调用新页面控件的init / load / processed / ready方法。
将空白的应用程序模板转换为导航模板项目并不难,将您的default.html / .css / .js内容移动到页面控件结构中,将navigator.js添加到default.html(和您的项目)中,然后将PageControlNavigator放入default.html。我建议您从nav应用程序模板创建一个项目,以供参考。根据以上说明,您应该能够理解其结构。
有关更多详细信息,请参阅我的免费电子书Programming Windows Store Apps with HTML, CSS, and JavaScript, Second Edition的第3章,在其中讨论了应用程序剖析和页面导航以及大量代码示例。
关于javascript - 如何使用空白应用程序模板在Windows Store App中执行导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464554/
我一直在尝试将 Redux 集成到项目中。 我按照使用示例进行操作,但收到错误store.getState is not a function。 所以我知道其他人也问过类似的问题,但情况略有不同。 R
我正在尝试将我的第一个应用程序上传到 App Store。我已完成 iTunes Connect 所需的所有步骤,我的应用程序状态为“等待上传”。 我相信下一步是使用 Application Load
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
App Store 有所谓的“服务器到服务器”通知。也就是说,当您购买应用内功能时,Apple 服务器会向您服务器的回调方法(发送收据数据)发出 HTTPS 请求。 问题是 - 收据数据中似乎没有用户
我已经将我的第一个应用程序上载到App Store,但是我没有放置我的App需要位置服务和wifi的UIRequiredDeviceCapabilities。结果:该应用程序没有像应做的那样开始寻找坐
由于iOS 8将于本月发布,并且我的应用仅支持32位(因为第3个库仅兼容32位),因此我不确定如果我将新版本的应用提交给我,则该应用的新版本是否会被拒绝App Store将于下个月发布,因为它不支持6
我有一个让我有些困惑的问题。 为了将我的应用提交到App Store,我必须输入Bundle ID后缀。如您所知,Bundle ID会获得Bundle ID后缀的确切名称(您在Bundle ID后缀上
如问题所述,我想知道更新后的应用程序一旦获得批准,是否会自动发布到应用程序商店中? 我的更新已完成并且已经过测试,由于需要几天的时间才能批准,因此我希望现在将其提交批准。同时,我需要在服务器上更改一些
获取应用程序提交到 Apple App Store 的屏幕截图的最简单方法是什么,需要包含的各种尺寸是多少? 另外,是否允许状态栏?我相信我听说它不是,但是包括 Facebook 和 Quora 在内
我在 iTunes 商店中有一个应用程序,其分发证书(在 key 链访问中)将于明天到期。它是一年前生成的,尽管我最近更新了我的 iPhone 开发者计划,但我还没有更新任何证书或签名。 当我将测试设
我的商店包含以下 reducer : export const centralStampState = { layoutState : layoutReducer, //this one is n
我即将将我的应用程序提交到 Apple App Store,并且我了解到 Apple 需要两周时间才能对其进行审核,然后才能上线。但是,在 iTunes Connect 的定价部分,它询问我什么时候发
如果我的应用程序正在接受审核或已获得批准(因此处于 Ready For Sale 状态或同等状态),我可以编辑哪些应用程序信息而无需提交应用程序的新版本? 最佳答案 据此Apple Documenta
我已经在Opera管理控制台上进行了全面检查,看不到他们在哪里提到付款方式。他们说明何时制作,但没有说明。即Paypal,Cheque等。 有人知道他们如何付款吗? 最佳答案 当金额达到200美元时,
我上传了我的二进制文件并创建了屏幕截图。我做的所有屏幕截图都是 640x960,我将它们上传为 PNG。这背后的想法是,我应该以尽可能最好的质量把它交给他们,这样当他们将它们重新压缩成 320x480
我从Microsoft下载了Windows 8 app samples,并下载了这些示例之一加速度传感器示例 我不知道如何测试它以计划使用此功能的软件? 我没有水面设备,想知道只有一种方法可以做到吗?
我正在为TestFlight上传第二个应用程序。第一次进展顺利,但这次却被拒绝了。 We have started the review of your beta app, but we are no
不确定这是正确的论坛,如果不是,我提前道歉。 某处是否有 App Store 新版本的提要?还是带有类别和发布日期的应用提要/列表? 此列表已从 App Store 中消失,我想看看是否可以制作一个应
我有一个 JSON 存储,定义如下 var subAccountStore = new Ext.data.JsonStore({ autoLoad: true, proxy: { ty
我有一个提交到应用商店的应用被拒绝,原因是: 2.30 不符合 Mac OS X 文件系统文档的应用将被拒绝 他们声称我的应用正在修改不受支持的 ~/Library/Preferences/com.a
我是一名优秀的程序员,十分优秀!