2012-11-06 41 views
3

下面的代码在调试模式(F5)下运行时完美地工作..但是当部署(作为应用程序磁贴)或运行时没有调试器(ctl + f5)时,它确实工作不是正常工作。WinJS System.Launcher只能在调试模式下工作

行为预期/工作时间:点击瓦片立即启动蒸汽URL链接,而不会显示html页面。

行为收到/不工作:点击瓦片启动应用程序,只渲染HTML页面,并从不启动蒸汽网址。

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(); 
})(); 

回答

2

看起来像是一个计时问题。以下作品适合我作为瓷砖

(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(); 
})(); 
+0

这样做,谢谢。 - 剩下的唯一的事情是,行为与从调试运行时的行为仍然不一样:即使启动了Steam网址,应用仍然运行/打开。我相信我会弄清楚这一点。这是一个很好的答案,谢谢。 –

+0

这工作,但并不理想。有谁知道这是必需的技术原因? – kamranicus

+0

我认为它可能使用'setImmediate'来修复,但似乎并非如此。它可能一直在为我工作,因为我的应用程序加载很快,但我测试了更多,发现它仍然无法正常工作。现在唯一可行的就是超时。 – kamranicus

相关问题