从Javascript Metro应用程序Win8中的URI获取参数信息
我正在Visual Studio 2012和Win8.1中开发一个JavaScript Metro应用程序 我在任何网络浏览器上使用URI调用我的应用程序,如:从Javascript Metro应用程序Win8中的URI获取参数信息,javascript,visual-studio-2012,microsoft-metro,windows-8.1,Javascript,Visual Studio 2012,Microsoft Metro,Windows 8.1,我正在Visual Studio 2012和Win8.1中开发一个JavaScript Metro应用程序 我在任何网络浏览器上使用URI调用我的应用程序,如: myapp:/// 但是我想发送几个类似这样的参数 myapp://parameters/?p1="hello"&p2="Jesus" 并恢复我的应用程序中的值用于多种用途,是否可能??怎么做 提前谢谢 编辑: 这是我到目前为止得到的代码,但仍然不起作用: app.onactivated = function (args)
myapp:///
但是我想发送几个类似这样的参数
myapp://parameters/?p1="hello"&p2="Jesus"
并恢复我的应用程序中的值用于多种用途,是否可能??怎么做
提前谢谢
编辑: 这是我到目前为止得到的代码,但仍然不起作用:
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
...
}
//Handles URI activation (by Protocol)
else if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.protocol) {
// Displays on screen the URI parameters
console.log("the parameters: " + args.detail.uri.queryParsed);
args.setPromise(WinJS.UI.processAll());
}
};
上面写着(从西班牙语翻译过来):
此表达式的值可能不正确。无法评估
因为“需要标识符”,请单击此按钮尝试评估
现在
这是全部错误
“TypeError:GetAt:无效参数\n在onactivated上”
(ms)-appx://7f50cf46-2f92-4088-b44e-2da6ccd24a08/js/default.js:68:13)\n
at包装器(毫秒)-appx://microsoft.winjs.1.0/js/base.js:549:61)\n在
调度一(ms)-appx://microsoft.winjs.1.0/js/base.js:6987:25)\n在
调度事件(ms)-appx://microsoft.winjs.1.0/js/base.js:6986:21)\n在排水队列处(毫秒)-appx://microsoft.winjs.1.0/js/base.js:7038:9)\n在 排队事件(毫秒)-appx://microsoft.winjs.1.0/js/base.js:7057:13)\n在 匿名函数 (ms)-appx://microsoft.winjs.1.0/js/base.js:7110:13)\n在 那就完全妥协吧 (ms)-appx://microsoft.winjs.1.0/js/base.js:1790:21)\n在 激活处理程序(ms)-appx://microsoft.winjs.1.0/js/base.js:7109:9)"
EDIT2:这是我迄今为止最接近我的答案所做的
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
...
// Handles URI activation
WinJS.Application.addEventListener("activated", onActivatedHandler, false);
args.setPromise(WinJS.UI.processAll());
}
};
function onActivatedHandler(eventArgs) {
if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.protocol) {
var uri = String(eventArgs.detail.uri.rawUri);
var par1 = uri.substring(uri.indexOf("?p1=") + 7, uri.indexOf("&p2=") -3);
var par2 = uri.substring(uri.indexOf("&p2=") + 7, uri.length - 3);
Windows.UI.Popups.MessageDialog("parameter1: " + par1 + ", and the parameter2: " + par2).showAsync();
}
}
这将显示一个弹出窗口,其中显示:
title
parameter1: hello, and the parameter2: Jesus
我希望得到一个数组或参数字典 是的,这是可能的。首先检查您的应用程序是否已通过协议激活 (
eventArgs.detail.kind==Windows.ApplicationModel.Activation.ActivationKind.protocol
假设eventArgs是激活事件args),则可以通过以下方式访问解析的查询字符串对象:
eventArgs.detail.uri.queryParsed
希望这能有所帮助。我在main post上添加了代码,试图应用您的建议,但当我调用函数时,出现了以下错误(翻译自西班牙语):SCRIPT5:JavaScript代码库即将捕获异常。在ms appx://7f50cf46-2f92-4088-b44e-2da6ccd24a08/js/default.js 0x800a0005中的第72行第13列中-JavaScript中的运行时错误?GetAt:Invalid参数文件:default.js,第72行,第13列可能我没有正确设置参数这是我的调用myapp://parameters/?p1=“parameter1”&p2=“parameter2”奇怪,刚刚在Win 8.1上进行了检查,工作正常。我通过粘贴来测试它myapp://parameters/?p1=“parameter1”&p2=“parameter2”到IE中,您是否在包清单中添加了协议声明?只是检查:)是的,我打过电话,之前(IE和Firefox测试过),我尝试过带参数和不带参数,这两种方式都有效,但现在它中断了正常的流程:console.log(“参数:“+args.detail.uri.queryParsed”);不知道我能帮你什么,因为我的应用程序(WinJS2.0 Win 8.1)中也有同样的代码。您是否尝试在那里设置断点并检查eventArgs.detail.uri的值?我添加了它们,我将用屏幕截图更新主要问题,如果图片不够大,只需右键单击它们并“查看图片”,在新选项卡上全屏显示它们