2012-08-08 211 views
5

我正在嘗試構建Windows Phone 7的phonegap應用程序。我試圖按照「backbutton」事件的文檔(http://docs.phonegap.com/en/ 2.0.0/cordova_events_events.md.html#backbutton),但我似乎無法得到它的工作。「backbutton」事件不會觸發

「deviceready」事件觸發,但「backbutton」事件不觸發。在Visual Studio Windows Phone模擬器中編譯和運行時,會調用onDeviceReady函數並記錄「設備就緒」,但當按下模擬器後退按鈕時,應用程序將退出並且控制檯中不記錄任何內容。 當按下後退按鈕時,應該運行OnBackKeyDown函數。

從官方文檔代碼的副本:

<html> 
    <head>  
     <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script> 
     <script type="text/javascript"> 
      function onLoad() { 
       document.addEventListener("deviceready", onDeviceReady, false); 
      } 
      function onDeviceReady() { 
       console.log("Device ready"); 
       document.addEventListener("backbutton", onBackKeyDown, false); 
      } 
      function onBackKeyDown() { 
       console.log("Back button pressed"); 
      } 
     </script> 
    </head> 
    <body onload="onLoad()"> 
     <div></div> 
    </body> 
</html> 
+3

[SSCCE](http://robzu.com/sscce-short-self-contained-correct-compilable-example/) – RobB 2012-08-08 14:41:09

+1

我可以在使用2.0.0項目模板的物理設備上重現此問題。諾基亞Lumia 800與WP 7.5(7.10.8773.98)。我建議你填寫一個錯誤報告並在這裏發佈鏈接。 https://issues.apache.org/jira/secure/Dashboard.jspa – Loda 2012-08-09 15:37:54

+0

我填寫了一個錯誤報告https://issues.apache.org/jira/browse/CB-1218。爲它投票! – Loda 2012-08-09 16:00:32

回答

3

我設法通過將cordova-1.8.1.js的一些部分複製到cordova-2.0.0.js來解決此問題。

在1.8.1中,搜索:var NamedArgs並將整個對象複製到2.0.0。

在2.0.0,請搜索:var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args);,取而代之的是:

if (action == 'overridebackbutton') { 
    if (NamedArgs[service] && NamedArgs[service][action]) { 
     var argNames = NamedArgs[service][action]; 
     var newArgs = {}; 
     var len = Math.min(args.length,argNames.length); 

     for(var n = 0; n < len; n++) { 
      newArgs[argNames[n]] = args[n]; 
     } 

     args = newArgs; 
    } 
    else if(args && args.length && args.length == 1) { 
     args = args[0]; 
    } 
} 
var command = service + "/" + action + "/" + callbackId + "/" + JSON.stringify(args); 

這可能不是一個漂亮的解決方案,但它爲我工作。

+0

使用上面的代碼,您可以使用以下語句啓用/禁用默認後退按鈕行爲(退出應用程序): Cordova.exec(null,null,「CoreEvents」,「overridebackbutton」,[true]); 或 Cordova.exec(null,null,「CoreEvents」,「overridebackbutton」,[false]); – opznhaarlems 2013-05-18 11:23:21