为什么 WinJS Navigation 应用程序将 css 应用到任何已访问的页面?

Why does WinJS Navigation app apply css to any visited page?

我开发了 WinJS 导航应用程序 (Windows 8.1/WP 8.1),但有一个问题:我已将 .css 文件link编辑为只有一个 .html 文件,但是当我转到任何其他 .html 页面时,如果它有任何相同的 class 然后应用程序应用 .css 我从第一页开始 !

有个问题:WinJS为什么要这样做?有任何解决方案或解决方法吗?

您可以在 VS2013 或 VS2015 上重现我的问题:zip(调试 Windows 项目,而不是 WindowsPhone)。

使用 WinJS 导航和页面控件时,"navigations" 发生在 default.html 的单个上下文或任何根应用程序页面内的 DOM 替换,而不是通过转储default.html(以及所有已加载的 CSS/JS)并初始化了一个新的页面上下文。

这种单页导航模型有几个好处:它保留了全局 JavaScript 上下文,并允许您 animations/transitions 将元素移入和移出页面。如果您真的完全导航到一个新页面,您将重置 JS 上下文并且将始终在空白页面中导航。

如您所见,副作用是在页面导航过程中加载的所有 CSS 都是累积的。也就是说,WinJS 中的 "navigation" 不会重置任何上下文,包括 CSS,这可能很难管理。 有几种解决方法:

  1. 使用全局 CSS 文件并避免使用特定于页面的 CSS 除非您知道某个页面是独一无二的。
  2. 确保每个页面都有一个顶级 div,其页面名称 class 如 <div class="page1">,然后在您的 CSS 中确定该页面的所有样式范围使用 .page1 选择器。
  3. 具体通过修改页眉中的<link>标签加载和卸载CSS文件。这确实是卸载 CSS 的唯一方法,但也意味着重新加载和重新解析 CSS 文件,这将导致页面重新呈现。

总的来说,我认为选项 2 是最好的,也是最便携的。

有关更长的文章,请参阅我的免费电子书 Programming Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition, and I've written up similar material on my blog, http://www.kraigbrockschmidt.com/2013/05/02/css-loading-behaviors-winjs-page-controls/ 第 3 章中的 "Page-Specific Styling" 部分。