【问题标题】:getting parameters info from URI in Javascript Metro App Win8在 Javascript Metro App Win8 中从 URI 获取参数信息
【发布时间】:2013-12-12 00:48:07
【问题描述】:

我正在 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: onactivated 参数无效\n (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 在 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 在 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 在 CompletePromise_then (ms-appx://microsoft.winjs.1.0/js/base.js:1790:21)\n 在 激活处理程序 (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 

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

【问题讨论】:

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


    【解决方案1】:

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

    eventArgs.detail.uri.queryParsed
    

    希望对您有所帮助。

    【讨论】:

    • 我在主帖上添加了代码,试图应用您的建议,但是当我调用该函数时,我收到此错误(从西班牙语翻译): SCRIPT5:JavaScript 代码库即将捕获异常。在 ms-appx 的第 72 行第 13 列中:/ / 7f50cf46-2f92-4088-b44e-2da6ccd24a08/js/default.js 0x800a0005 - JavaScript 中的运行时错误? GetAt:无效参数文件: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);
    • 不确定我可以如何帮助您,因为相同的代码在我的应用程序(WinJS 2.0 Win 8.1)中工作。您是否尝试过在那里设置断点并检查 eventArgs.detail.uri 的值?
    • 我添加了它们,我将使用屏幕截图更新主要问题,如果图片不够大,只需右键单击它们并“查看图片”以在新标签上全屏显示它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 2017-04-26
    • 2013-05-10
    • 2023-03-30
    相关资源
    最近更新 更多