我正在开发一个 Windows 8 Metro 应用程序,我发现(即使在我没有触及代码的示例应用程序中),当您在页面之间导航时,顶级“default.html”获取每个单独的 js 和在应用程序运行期间加载过的 css 文件。
这让我很头疼,因为我的 css 在不同的页面之间发生冲突。我错过了什么还是这是一个严重的错误?
最佳答案
不卸载 JavaScript 和 CSS 是一个深思熟虑的选择,而不是意外或疏忽。
首先,要明白页面控件纯粹是一种 JavaScript 结构——浏览器引擎完全不知道它们。浏览器只会看到一段由脚本动态生成的 DOM。
Web 平台不允许您卸载脚本文件 - 一旦它们被加载到上下文中,它们就会永远存在。
使用 CSS,他们可以尝试删除标签,但它打开了一堆蠕虫。根据导航到的订单页面,您最终可能会在同一个应用程序中应用不同的样式。如果两个页面引用同一个样式表怎么办?您是否两次添加相同的链接标签?你删除哪一个?
一团糟。相反,WinJS 保证脚本和样式表只会在第一次被引用时加载一次。因此,您可以让应用程序中的每个页面都引用“myStyles.css”,并且它只会被加载一次(并且只有一个样式标签)。
那么你如何防止你看到的问题呢?首先,请记住您正在构建一个应用程序,而不是一个可以随意增加新内容的网站。决定你的一般风格和类(class)。将共享样式放在您的 default.css 中,并从您的 default.html 文件中引用它。
对于单个页面,最简单的做法是在样式前加上页面名称。代替:
<div class='intro'></div>
做
<div class='page1-intro'></div>
那么你就可以保证避免碰撞。
如果您通过 ID 引用页面元素,请不要这样做。在页面中使用 ID 会导致各种潜在的怪异(如果你同时渲染同一个页面控件两次怎么办?而且,在页面加载到 DOM 之后,ID 才存在,这意味着数据双赢 - ID 的选项引用不起作用)。但是,如果您再次坚持,请考虑在页面前添加 id。
基本上,设置临时命名空间以防止发生冲突。这比手动撕掉链接标签要容易得多,并且比完全导航会带来更好的应用体验。
关于windows-8 - WinJS 不卸载 js/css,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11997190/