从Javascript Metro App Win8中的URI获取参数信息

时间:2013-12-04 18:57:15

标签: javascript visual-studio-2012 microsoft-metro windows-8.1

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

我在任何webBrowser上使用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());
    }
};

enter image description here

它说(翻译自西班牙语):

  

此表达式的值可能不正确。无法评估   因为'预期标识符'单击此按钮以尝试评估   现在

这是完整的错误

  

“TypeError:GetAt:无效参数\ n在onactivated   (MS-APPX://7f50cf46-2f92-4088-b44e-2da6ccd24a08/js/default.js:68:13)\ n   在包装器(ms-appx://microsoft.winjs.1.0/js/base.js:549:61)\ n at   dispatchOne(ms-appx://microsoft.winjs.1.0/js/base.js:6987:25)\ n at   dispatchEvent(ms-appx://microsoft.winjs.1.0/js/base.js:6986:21)\ n
  在drainQueue(ms-appx://microsoft.winjs.1.0/js/base.js:7038:9)\ n at   queueEvent(ms-appx://microsoft.winjs.1.0/js/base.js:7057:13)\ n at   匿名功能   (ms-appx://microsoft.winjs.1.0/js/base.js:7110:13)\ n at   CompletePromise_then   (ms-appx://microsoft.winjs.1.0/js/base.js:1790:21)\ n at   activatedHandler(ms-appx://microsoft.winjs.1.0/js/base.js:7109:9)“


EDIT2:这就是我迄今为止得到的最接近我的答案URI

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 

我希望得到一个参数数组或字典......

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。首先检查您的应用是否已通过协议激活 (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.protocolol假设eventArgs是激活事件args)然后您可以通过以下方式访问已解析的查询字符串对象:

eventArgs.detail.uri.queryParsed

希望有所帮助。