windows-8 - WinJS 不卸载 js/css

标签 windows-8 microsoft-metro winjs

我正在开发一个 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/

相关文章:

windows-8 - 如何禁用 Windows 8 (WinRT) 锁定屏幕

c# - XAML DispatcherTimer 间隔太慢

c# - 为什么当我切换语义缩放时,它没有导航到该部分?

sqlite - WinJS SQLite runAsync all 在做其他事情之前

javascript - 如何在 WinJS Windows 8 应用程序中正确检索 IndexedDb 中的所有数据?

c# - 如何从 "settings"弹出窗口更新页面控件

javascript - 在 WinJS.UI.Pages 中显示完整的 HTML 内容

sql - 如何在 Windows 应用商店应用程序中从 SQLite 数据库获取单行?

visual-studio - 我们可以通过命令行编译和签名 Windows 8 winjs 应用程序吗

windows-8 - 我的应用程序的试用用户可以使用我的应用程序内购买吗?