2012-11-06 73 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

相關問題