Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript Metro应用程序Win8中的URI获取参数信息_Javascript_Visual Studio 2012_Microsoft Metro_Windows 8.1 - Fatal编程技术网

从Javascript Metro应用程序Win8中的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)

我正在Visual Studio 2012和Win8.1中开发一个JavaScript Metro应用程序

我在任何网络浏览器上使用URI调用我的应用程序,如:

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的值?我添加了它们,我将用屏幕截图更新主要问题,如果图片不够大,只需右键单击它们并“查看图片”,在新选项卡上全屏显示它们