2012-08-08 212 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