我们有一个SPA网络应用程序,我们正在尝试将其转换为WinJS项目作为本机Windows应用商店应用。在大多数情况下,除了DOM manipulations deemed unsafe之外,Javascript正在运行。
一件显而易见的事情是,应用程序的起始页面(例如index.html)如何提供查询字符串和哈希参数?我们的网站主页旨在根据参数采取不同的行为。
e.g。的index.html?CONTEXTID = XXXXX#环境= XXXXX
我尝试调整package.appxmanifest中的值无效。它会在查询字符串上抛出错误,并且哈希参数将无声地保持不变。
更新:项目背景
关于我们的应用程序的功能的简要说明,以及为什么上述天真的愿望不起作用以及我们如何解决这个问题的答案。
我们的网络应用程序是一个高度动态的数据驱动应用程序,完全依赖于数据来确定要呈现的内容。因此,?contextId = xxxxx参数非常重要,因为它告诉我们的系统加载数据,进一步通知要加载哪种类型的可视组件,然后递归地形成截然不同的UI。
因此我们希望找到一些方法将这些参数(如传统的命令行参数)提供给同一个可执行文件以生成不同的UI。因此,不同的“应用程序”仅仅是这些参数的变化。就像ASP.NET Web项目中web.config的“配置转换”机制一样,这是最受欢迎的。
然而,进一步的测试表明它是不可能的;单个Windows应用商店应用项目具有提供到打包的应用包中的GUID。使用不同的“构建配置”多次构建同一个项目只是意味着覆盖以前的安装,因为它们是相同的应用程序随着版本号的增加。答案详细说明了我们如何解决这个问题。
答案 0 :(得分:0)
从主要磁贴启动时,Windows应用商店应用无法使用URI参数。在这种情况下,您应该确保应用程序默认为合适的值,例如,如果您打算在清单中提供默认值,那么默认情况下应用程序的激活处理程序中的那些激活处理程序中的ActivationKind.launch案例.detail.arguments是空的。
还有另外两种方法可以启动可以提供其他参数的应用。
首先是通过辅助磁贴启动。当您从应用程序创建磁贴时(需要用户同意),您将提供启动参数。在激活处理程序中,对于ActivationKind.launch,这些args将位于eventObject.detail.arguments属性中。
其次是通过URI关联启动应用程序。您为此使用自定义模式,该模式在清单中声明。然后,应用程序将看到ActivationKind.protocol和eventObject.detail.uri将包含完整的URI,包括任何参数。可以通过将URI输入浏览器地址栏,或通过用户可以在“开始”屏幕上配置的快捷方式,从其他应用程序启动URI启动。
答案 1 :(得分:0)
第一步是将我们的Windows(8.1)商店项目转换为通用应用程序结构,然后分离出一个单独的Windows Phone WinJS项目(当我们希望稍后定位Windows Phone时这很好)和共享项目
实际上,Windows Store项目中的所有内容都会移动到共享项目(包括default.html或index.html)。 Windows Store项目中剩下的是带有参数的自定义config.js
window.customWin8 = {
contextId: xxxxxxxxxx,
customParam: 'xxxxxxxxxx'
};
感知查询字符串/哈希参数的下游模块将返回此备用对象(如果存在以获取所需的数据)。
现在,对于我们希望部署的每个不同的应用程序,现在似乎需要一个单独的Windows应用商店项目,因此它获得自己的GUID,不会与其他应用程序冲突。由于Visual Studio提供的通用结构,所有这些项目都将引用相同的共享项目。唯一的缺点是Visual Studio 2013似乎没有直接的UI方法来引用共享项目,并且必须是手动代码到jsproj文件中。
<Import Project="..\Common.Shared\Common.Shared.projitems" Label="Shared" />
通过这种调整,他们可以使用孤立的“构建配置”进行构建和打包。