2013-12-18 3 views
4

Я использую Cordova 3.2.0 -0.3.0 и NetBeans 7.4 для разработки приложения Кордовы. Несмотря на то, что он работает правильно в браузере Chrome от Chrome, он, похоже, не работает должным образом ни в моем телефоне (Android 4.1.2), ни в эмуляторе (Android 4.3, API уровня 18).
Проблема заключается в том, что событие deviceready никогда не запускается.Событие девицериады не стреляет в Кордове 3.2.0

Это код:

app.onReady = function(callback) { 
    $(document).ready(function() { 
     // are we running in native app or in browser? 
     window.isphone = false; 
     if (document.URL.indexOf("http://") === -1 
       && document.URL.indexOf("https://") === -1) { 
      window.isphone = true; 
     } 

     if (window.isphone) { 
      alert("isPhone"); 
      document.addEventListener("deviceready", callback, false); 
     } else { 
      callback(); 
     } 
    }); 
}; 

app.onReady(function(){ alert("test"); }); 

"тест" он никогда не показывается.

+0

Возможный дубликат http://stackoverflow.com/questions/17808586/phonegap-not-calling-device-ready-function – Ignitor

+3

Глупый вопрос: вы уверены, что 'cordova-x.js' включен правильно? – Ignitor

+0

@ Ygnitor Jackpot! ^^ – eversor

ответ

9

Как и следовало ожидать, я забыл указать cordova.js.
Хотя я должен сказать, в моей защите (: P), что странно включать скрипт, как если бы он был на вашем корне, когда его там нет (по крайней мере, при тестировании в браузере).

+2

Для тестирования в браузере вы можете использовать [Phonegap-Desktop] (https://github.com/jxp/phonegap-desktop), который имитирует некоторые из API Кордовы в браузере. – Ignitor

+1

Я создал проект cordova с использованием инструментов CLI и каким-то образом предполагал, что зависимость будет автоматически внедрена в корневой html. Очевидно, это была не так, и моя ошибка. – DonSteep

3

Проблема может быть, что deviceready событие инициируется перед тем DOM-готов, то есть до того, как $(document).ready() обратного вызова выполняется.

Необходимо попытаться связаться с deviceready независимо от $(document).ready(). См. this answer для примера того, как это сделать.

+1

Это не так. В документах Cordova говорится: «Событие deviceready ведет себя несколько иначе, чем другие. Любой обработчик событий, зарегистрированный после пожаров событий deviceready, сразу вызывает функцию обратного вызова». Поэтому, если событие deviceready присоединяется после того, как оно первоначально срабатывает, оно должно немедленно вернуться. (Я внезапно сталкиваюсь с той же проблемой, что и автор, но это сработало для меня в прошлом.) –

+0

Oh. Это предложение вошло в версию 2.2.0. Поэтому вопрос заключается в том, были ли эти функции введены в 2.2.0 или не были только что описаны до 2.2.0. С другой стороны, op использует 3.2.0, поэтому это не имеет значения. : -/ – Ignitor

Смежные вопросы