PhoneGap - выход Android на подставку
Я пытаюсь программировать RSS-ридер, используя jquery mobile и cordova. Мой RSS-ридер состоит из 3-х страниц (в том же документе HTML: стр. 1, стр. 2, стр. 3). Я пытаюсь переопределить (аппаратное) поведение backbutton, чтобы он выходил из программы. Чтобы проверить, что я не делаю никаких ошибок при настройке проекта, я использовал проект примера PhoneGap и загрузил его в Eclipse. Каждая функция выборки работала, поэтому я переместил мою папку index.html и res в пример с телефонными записями. В моем index.html я импортирую следующие скрипты:
<script src="res/jquery-1.7.1.min.js"></script>
<script src="res/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8" src="main.js"></script>
и мой файл main.js выглядит так:
document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is('#homepage')){
e.preventDefault();
navigator.app.exitApp();
}
else {
navigator.app.backHistory()
}
}, false);
Вы можете проверить версию моих скриптов в первом примере кода. Любые идеи о том, как я могу заставить код работать, чтобы он просто выходил из приложения, когда я нажимаю кнопку на моей Xperia Arc? При необходимости я могу загрузить полный код.
РЕДАКТИРОВАТЬ: Я проверил функцию звукового сигнала телефонной связи (cordova) на моем телефоне Android, и он работает, поэтому у этого нет ничего с плохим внедрением script. Это должно быть что-то в файле main.js. Возможно, проблема с совместимостью с функциями функции jquerymobile backgutton и функцией откидной кнопки phonegap.
Ответы
Ответ 1
Вам нужно подождать, пока устройство будет готово добавить прослушиватель событий:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is('#homepage')){
e.preventDefault();
navigator.app.exitApp();
}
else {
navigator.app.backHistory();
}
}, false);
}
Ответ 2
Если вы не хотите использовать какую-либо библиотеку, вы можете использовать window.location.hash для получения "панели" вашего приложения.
Пример:
function onDeviceReady(){
document.addEventListener("backbutton", function(e){
if(window.location.hash=='#home'){
e.preventDefault();
navigator.app.exitApp();
} else {
navigator.app.backHistory()
}
}, false);
}
document.addEventListener("deviceready", onDeviceReady, false);
Ответ 3
Если вы не хотите использовать Jquery Mobile, замените $.mobile.activePage.is('# homepage') на document.getElementById('# homepage') в ответе @mornaner, как показано в следующем коде:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
document.addEventListener("backbutton", function(e){
if(document.getElementById('#homepage')){
e.preventDefault();
navigator.app.exitApp();
}
else {
navigator.app.backHistory()
}
}, false);
}
Таким образом, вам не нужно скачивать тарабарщину Jquery Mobile только для этой цели. Кроме того, activePage устарела с JQuery mobile 1.4.0 и будет удалена с 1.5.0. (Вместо этого используйте метод getActivePage() из виджета pagecontainer)
Ответ 4
Чтобы отключить поведение по умолчанию кнопки "Назад" на устройствах Android, просто зарегистрируйте обработчик событий для кнопки "Назад" . Это предотвратит закрытие кнопки "Назад" .
Код, показанный ниже, специально для Framework7
$(document).on('page:beforeinit', function (e) {
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
document.addEventListener( "backbutton", disableBackButton, false );
}
});
function disableBackButton( e ){
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length < 3 ){
document.removeEventListener("backbutton", disableBackButton );
}
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
$.fn.hyellaIMenu.mainView.router.back();
}
};
Чтобы переопределить поведение кнопки по умолчанию, зарегистрируйте прослушиватель событий для события backbutton.
ПРИМЕЧАНИЕ. Больше не нужно вызывать какой-либо другой метод для переопределения поведения кнопки "назад".
https://cordova.apache.org/docs/en/latest/cordova/events/events.html#backbutton
Ответ 5
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
//enter code here enter code heredevice APIs are available
//enter code here
function onDeviceReady() {
// Register the event listener
document.addEventListener("backbutton", onBackKeyDown, false);
}
// Handle the back button
//
function onBackKeyDown() {
}