visual-studio-2012 - WinJS System.Launcher 仅在 Debug模式下工作

标签 visual-studio-2012 microsoft-metro winjs

以下代码在 Debug模式 (F5) 下运行时完美无缺......但在部署(作为应用程序磁贴)或在没有调试器 (ctl+f5) 的情况下运行时,它无法正常运行.

工作时的预期/行为:单击磁贴会立即启动 Steam URL 链接,而不会显示可见的 html 页面。

行为收到/不工作:点击磁贴启动应用程序,只呈现 html 页面,从不启动 steam url。

var mydefs = new Object();
mydefs = { url: 'steam://rungameid/200710' };

function launch(url) {
    var uri = new Windows.Foundation.Uri(url);

    Windows.System.Launcher.launchUriAsync(uri).then(
         function (success) {
             if (success) {
                 // File launched
                 window.close();
             } else {
                 // File launch failed
             }
         });
}

(function () {
    "use strict";

    WinJS.Binding.optimizeBindingReferences = true;

    var app = WinJS.Application;
    var activation = Windows.ApplicationModel.Activation;

    app.onactivated = function (args) {
        if (args.detail.kind === activation.ActivationKind.launch) {
            launch(mydefs.url);

            args.setPromise(WinJS.UI.processAll());
        }
    };

    app.oncheckpoint = function (args) {
        window.close();
    };

    app.start();
})();

最佳答案

看起来像是时间问题。以下作为磁贴对我有用

(function () {
   "use strict";
    var mydefs = new Object();
    mydefs = { url: 'steam://rungameid/200710' };

    WinJS.Namespace.define("Steam", {
      launch: function launch(url) {
        var uri = new Windows.Foundation.Uri(url);

        Windows.System.Launcher.launchUriAsync(uri).then(
             function (success) {
                 if (success) {
                     // File launched
                     window.close();
                 } else {
                     // File launch failed
                 }
             });
          }
  });


  WinJS.Binding.optimizeBindingReferences = true;

  var app = WinJS.Application;
  var activation = Windows.ApplicationModel.Activation;

  app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {                 
        setTimeout('Steam.launch("steam://rungameid/200710");', 2000);
        args.setPromise(WinJS.UI.processAll());
    }
  };

  app.start();
})();

关于visual-studio-2012 - WinJS System.Launcher 仅在 Debug模式下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244047/

相关文章:

javascript - WinJS Promise 然后出错

c - Visual Studio 在 for 循环后要求分号

iis - VS2012 Web Deploy Package 创建应用程序池

c# - 如何在任何给定时间引发事件

visual-studio-2010 - Visual Studio 2010 是否支持 Windows Metro 风格的应用程序?

javascript - 在 Windows Metro javascript 应用程序中读取文件

visual-studio-2012 - Visual Studio Express 2012 for Web 中的 WCF 数据服务在哪里

c++ - 如何在 Visual Studio (C++) 中找到应用程序的入口点

c# - 如何在源数据更改时更新数据绑定(bind)组合框?

javascript - 我无法在 Windows8 设置 super 按钮中使用 document.GetElementByID() 获得切换控件