【问题标题】:"backbutton" event won't fire“后退按钮”事件不会触发
【发布时间】:2012-08-08 14:39:34
【问题描述】:

我正在尝试为 Windows Phone 7 构建 phonegap 应用程序。我正在尝试遵循“后退按钮”事件的文档 (http://docs.phonegap.com/en/2.0.0/cordova_events_events.md。 html#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>

【问题讨论】:

标签: javascript windows-phone-7 cordova cordova-2.0.0


【解决方案1】:

我设法通过将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);

这可能不是一个很好的解决方案,但它对我有用。

【讨论】:

  • 使用上面的代码,您可以使用以下语句启用/禁用默认的后退按钮行为(退出应用程序):Cordova.exec(null, null, "CoreEvents", "overridebackbutton", [true ]);或 Cordova.exec(null, null, "CoreEvents", "overridebackbutton", [false]);
【解决方案2】:

修复已在此处提交: https://github.com/purplecabbage/incubator-cordova-wp7/commit/d04b87abb3c3822ef25438e1353a1d7d2e0d6628

在此期间,您需要等待 2.1.0 发布,或者从源代码构建您的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 2013-10-11
    • 1970-01-01
    相关资源
    最近更新 更多