событие кнопки «назад» не срабатывает

Я пытаюсь создать приложение телефонной связи для Windows Phone 7. Я пытаюсь следовать документации по событию «кнопка возврата» (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>

person Jonathan Whitney    schedule 08.08.2012    source источник
comment
SSCCE   -  person RobB    schedule 08.08.2012
comment
Я смог воспроизвести эту проблему на физическом устройстве, используя шаблон проекта версии 2.0.0. Nokia Lumia 800 с WP 7.5 (7.10.8773.98). Я предлагаю вам заполнить отчет об ошибке и опубликовать ссылку здесь. issues.apache.org/jira/secure/Dashboard.jspa   -  person Loda    schedule 09.08.2012


Ответы (2)


Исправление было зафиксировано здесь: https://github.com/purplecabbage/incubator-cordova-wp7/commit/d04b87abb3c3822ef25438e1353a1d7d2e0d6628

Вам нужно будет дождаться выпуска версии 2.1.0 в начале следующей недели или тем временем создать свое приложение из исходного кода.

person purplecabbage    schedule 29.08.2012

Мне удалось это исправить, скопировав некоторые части 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);

Это может быть не очень красивое решение, но оно работает для меня.

person opznhaarlems    schedule 13.09.2012
comment
Используя приведенный выше код, вы можете включить или отключить поведение кнопки «Назад» по умолчанию (выйти из приложения), используя следующую инструкцию: Cordova.exec(null, null, CoreEvents, overridebackbutton, [true]); Или Cordova.exec(null, null, CoreEvents, overridebackbutton, [false]); - person opznhaarlems; 18.05.2013