我正在使用 Microsoft 的 Typescript 和 WinJS 多设备混合应用模板创建单页导航应用。该应用程序为 Win8、WP8 和 Android 构建,并且可以很好地部署到模拟器。但是,Win8 和 WP8 应用程序无法正确导航到应用程序的第一页。Android 使用相同的代码可以很好地导航。
WinJS 具有导航状态保存功能,但实际上并不执行导航本身。我从 Typescript/WinJS 示例 Encyclopedia 中借用了实际导航代码,可在此处找到。
似乎失败的相关部分如下所示:
args.detail.setPromise(
WinJS.Promise.timeout().then(function () {
if (oldElement.winControl && oldElement.winControl.unload) {
oldElement.winControl.unload();
}
return WinJS.UI.Pages.render(args.detail.location, newElement, args.detail.state, parented);
}).then((control) => {
this.element.appendChild(newElement);
this.element.removeChild(oldElement);
oldElement.innerText = "";
this.navigated();
parentedComplete();
})
);
在渲染命令返回后,在 Android 上,元素的 innerHTML 包含路径中指向的页面 (args.detail.location)。在 Win8 和 WP8 上,该元素仍然是空白的。
这部分代码由根 index.html 文件中的 WinJS 特定 html 触发。
<div id="contenthost" data-win-control="TurnstileTS.PageControlNavigator" data-win-options="{home: './views/home/HomeView.html'}"></div>
此路径在 Android 中运行良好。Ripple 基于 Web 的 Android 模拟器中的绝对路径是http://localhost:4400/views/home/HomeView.html
.
此路径在 WP8 或 Win8 中不起作用,但也不会引发异常。屏幕只是一片空白。Win8 应用程序调试运行期间的绝对路径是ms-appx://io.cordova.turnstile/www/views/home/HomeView.html
.
我看不出有什么问题。我正在使用最新版本的 WinJS 和 WinJS 构建中包含的类型。
编辑 另一个难题: 此示例使用 Cordova 和 WinJS,但没有使用 Typescript。一切都在javascript中。它也有自己的导航功能。这似乎适用于 Win8 和 WP8。据我所知,它在 WinJS 库中调用相同的函数。我真的找不到这个样本和我正在尝试做的事情之间的任何主要区别。
编辑 #2 好的,在发现 javascript 控制台开始吐出错误后,我在 Win8 中运行它时收到以下消息:
APPHOST9623: The app couldn’t resolve ms-appx://57059lmcpherson.turnstile/views/home/HomeView.css because of this error: RESOURCE_NOT_FOUND.
实际上,有很多这样的消息。所以,有点不对劲。
我读到了一些关于在路径中使用斜杠的内容对于 Windows/Cordova 应用程序是不可接受的,所以我尝试重写它们。如果 javascript 文件与 html 文件位于同一子目录中,则路径引用应该只是不带斜杠的文件名。但是,javascript 控制台显示这已在 Win8 中解释为 www 文件夹的根目录(在构建期间生成)。如果我尝试使用“/views/home/HomeView.css”将其硬编码到实际路径,它仍然找不到该文件。如果javascript控制台指示它试图在头部加载脚本,我不确定为什么没有加载HTML文档的正文。