Сенсорные события не работают на iOS-сборке приложения Cordova
У меня есть очень простое приложение Cordova, которое является расширением стандартного шаблона Cordova "устройство готово". Он имеет одну кнопку с прикрепленным простым событием щелчка.
как можно увидеть здесь, работает на симуляторе iOS.
Ниже приведен код моего проекта
index.html
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css">
<title>Hello World</title>
</head>
<body>
<div class="app">
<h1>Simple App</h1>
<div id="deviceready" class="blink">
<p class="event listening">Connecting to Device</p>
<p class="event received">Device is Ready</p>
</div>
<button type="button" id="testBttn">Press me</button>
</div>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
index.js
var app = {
// Application Constructor
initialize: function() {
this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicitly call 'app.receivedEvent(...);'
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// Update DOM on a Received Event
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
}
};
app.initialize();
console.log('ready to test button');
document.getElementById("testBttn").addEventListener("click", function (){
console.log('button was pressed!');
});
Проблема, с которой я сталкиваюсь, заключается в том, что кнопка полностью не реагирует на любой щелчок (сенсорный жест) при работе на симуляторе
Кнопка работает нормально и выводит на консоль при запуске в браузере
Когда я запускаю приложение через XCode на симуляторе вместо CLI, я получаю тот же результат, хотя получаю следующий вывод, как только нажимаю в любом месте экрана симулятора.
2016-10-13 00:16:57.738602 CordovaApp[14845:2773283] subsystem: com.apple.UIKit, category: Touch, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-13 00:16:57.739331 CordovaApp[14845:2773283] subsystem: com.apple.UIKit, category: Gesture, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
2016-10-13 00:16:57.741806 CordovaApp[14845:2773283] subsystem: com.apple.UIKit, category: GestureExclusion, enable_level: 0, persist_level: 0, default_ttl: 1, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0
Этот вывод предлагает мало понимания, но может указывать на очевидную проблему. У меня никогда не было такого вывода при создании родных приложений IOS.
Любая помощь приветствуется.
Изменить: я использую XCode 8.0
Я упоминаю об этом, поскольку кажется, что этот вид вывода консоли довольно распространен в XCode 8 при создании приложений для ios 10. Из того, что я могу найти, кажется, что этот вывод на консоль тривиален и не является чем-то необычным..
2 ответа
Я обнаружил, что то же самое происходит со мной сегодня внезапно. Единственное решение, которое я нашел, на самом деле не совсем решение, но когда я переключаюсь на другое приложение, а затем снова переключаюсь на свое приложение, внезапно снова начинают работать сенсорные события. Но недавно открытое приложение совершенно не отвечает. Так что не совсем решение, но посмотрите, испытываете ли вы такое же поведение.
С помощью touchstart
должно сработать:
initialize: function() {
document.getElementById('testBtn').addEventListener('touchstart', this.clickedBtn.bind(this), false);
},
clickedBtn: function() {
console.log('CLICKED THE BUTTON!');
},