PhoneGap - navigator.app.exitApp() не работает

Я использую Phonegap для создания небольшого приложения, но navigator.app.exitApp()? вообще не работает.

  • Это мое первое гибридное приложение.
  • Моя целевая платформа — Android 5.
  • Я разрабатываю Windows с Cordova CLI.

Я вызываю функцию JavaScript с этим

<input type='button' onclick='exitApp();'/>

JavaScript:

function exitApp() { navigator.app.exitApp(); }

Идеи??


person Thomas Fifield    schedule 02.02.2016    source источник
comment
Вы установили плагин уведомлений?   -  person Yazhini Murugaiya    schedule 02.02.2016
comment
Этот?? Плагин Cordova добавляет github.com/katzer/cordova-plugin-local-notifications   -  person Thomas Fifield    schedule 02.02.2016
comment
Вот этот: - установка плагина Cordova org.apache.cordova.dialogs   -  person Yazhini Murugaiya    schedule 02.02.2016
comment
Пожалуйста, ответьте на следующие вопросы в своем сообщении. Так как это, кажется, ваш первый пост на эту тему. Это ваше первое гибридное приложение? Какова ваша целевая платформа и их целевые версии? Андроид 4,5,6? iOS 7,8,9? На какой платформе вы разрабатываете? Винда, Макос? Используете ли вы CLI, SDK или сборку ? Пожалуйста, не предполагайте ответ, пожалуйста, прочитайте ссылку. Как только вы ответите на вопрос в сообщении, ответьте в комментариях, чтобы я знал, что вы добавили информацию в сообщение.   -  person    schedule 02.02.2016
comment
Джесси, я ответил на твой вопрос в посте. Спасибо   -  person Thomas Fifield    schedule 03.02.2016
comment
Вам нужно использовать знак @ перед моим именем, иначе я не увижу ответ. Я попал на это случайно. ЭТО ВАШЕ ПЕРВОЕ ГИБРИДНОЕ ПРИЛОЖЕНИЕ?   -  person    schedule 03.02.2016
comment
да, это мое первое приложение, мне нужно, чтобы оно работало только на Android @JesseMonroy650   -  person Thomas Fifield    schedule 03.02.2016
comment
Хорошо. Я обновил ваш оригинальный пост. FWIW: Phonegap Build — это онлайн-сервис сборки от Adobe/Phonegap. Ваш ответ займет около 30 минут. Вы задали очень хороший вопрос, который будет иметь успех после того, как ответ будет принят.   -  person    schedule 03.02.2016


Ответы (4)


раньше у вызова navigator.app.exitApp() было всего несколько камней преткновения, но теперь и Google, и Apple создали серьезные препятствия для разработчиков.

  1. Убедитесь, что вы ждете deviceready события, прежде чем сделать вызов exit. Вы можете подумать о том, чтобы поставить заставку или затенить (отключить) кнопку или что-то еще, пока не сработает deviceready и не загрузится библиотека Cordova.
  2. Это *препятствие*. Теперь вам нужно добавить плагин whitelist, а для Android добавить CSP. Плагин необходим для CSP. Вы можете обойти это, переместив весь Javascript (включая любой on*=) и <style>style=) в отдельный файл. ИСКЛЮЧЕНИЕ для CSP использования любых интернет-ресурсов.

В №1

Добавьте это в свой javascript:

// Wait for PhoneGap to load
document.addEventListener("deviceready", onDeviceReady, false);

function onDeviceReady() {
    // alert("deviceready");
    document.getElementById('exitApp').addEventListener('click', function() {
        navigator.app.exitApp();
    });
}

Добавьте это в свой index.html:

<button id="exitApp">Exit</button>

На № 2 быстрый ответ:

Добавьте это в свой config.xml

<plugin name="cordova-plugin-whitelist" source="npm" spec="1.1.0" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->

ВНИМАНИЕ, ВАШЕ ПРИЛОЖЕНИЕ ТЕПЕРЬ НЕЗАЩИЩЕНО. ОБЕСПЕЧИТЬ БЕЗОПАСНОСТЬ ПРИЛОЖЕНИЯ ОТ ВАС.
Добавьте следующее в свой index.html

<meta http-equiv="Content-Security-Policy" 
         content="default-src *; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

ВНИМАНИЕ, ВАШЕ ПРИЛОЖЕНИЕ ТЕПЕРЬ НЕЗАЩИЩЕНО. ЗАЩИТА ВАШЕГО ПРИЛОЖЕНИЯ ОТ ВАС.
Этот рабочий лист белого списка поможет вам, когда вы будете готовы повысить безопасность.
КАК: применить Cordova/Phonegap к системе белого списка

person Community    schedule 03.02.2016

Используйте следующее:

function backKeyDown() {
    navigator.notification.confirm("Are you sure you want to exit?", onConfirm, "Please Confirm", "Yes,No"); 
}
function onConfirm(button) {
    if(button==2){//If User selected No, then we just do nothing
        return;
    }else{
        navigator.app.exitApp();// Otherwise we quit the app.
    }
}

Вам необходимо установить следующий плагин:

cordova plugin install org.apache.cordova.dialogs
person Yazhini Murugaiya    schedule 02.02.2016
comment
Нужно ли сегодняшнее (2020 год) диалоговое окно для получения ответа на главный вопрос? Заранее спасибо. - person Bernard; 09.06.2020

вы также можете просто добавить слушателя в обратный вызов вашего устройства

onDeviceReady: function () {

    document.addEventListener('backbutton', function(e){
        e.preventDefault();
        //TODO: throw up your dialog here!
    }, true);

    //other stuff here
}
person weagle08    schedule 02.02.2016
comment
Не сработало, я попытался использовать самую простую идею, и нет @weagle08 - person Thomas Fifield; 03.02.2016
comment
странно, потому что тот же фрагмент находится в производственном коде с navigator.app.exitApp(); это работает, как ожидалось. У вас есть очень простой проект для воспроизведения проблемы? - person weagle08; 03.02.2016
comment
Я сделал новый проект только с этим и работал... Но в моем не работает.... Странно @weagle08 - person Thomas Fifield; 03.02.2016
comment
вы ловите какие-либо исключения? мне интересно, не был ли ваш прототип объекта каким-то образом взломан или, может быть, у вас есть где-то слушатель, который его ловит и каким-то образом предотвращает выход из приложения? - person weagle08; 03.02.2016

Просто используйте там, где вам нужно в этой строке (Ionic 3 точно работает)

navigator.app.exitApp();

это все. наслаждайтесь кодированием...

person mahendren    schedule 14.06.2019
comment
это просто минимизирует приложение, не убивая процесс - person Mimouni; 13.11.2019