“后退按钮”事件将不会触发(“backbutton” event won't fire)

2019-09-21 00:51发布

我试图构建的Windows Phone 7。我试图按照文档中的“后退按钮”事件的PhoneGap应用程序(http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton ),但我似乎无法得到它的工作。

该“deviceready”事件触发,但“后退按钮”事件不会。 当编译和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>

Answer 1:

的修复已经在这里承诺: https://github.com/purplecabbage/incubator-cordova-wp7/commit/d04b87abb3c3822ef25438e1353a1d7d2e0d6628

您将需要等待2.1.0至下周初公布,或建立从源代码您的应用程序,在此期间。



Answer 2:

我设法通过复制科尔多瓦 - 1.8.1.js的某些部分科尔多瓦 - 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);

这可能不是一个漂亮的解决方案,但它为我工作。



文章来源: “backbutton” event won't fire