2013-05-30 2 views
0

Я работаю в своем первом учебнике по телефонным разговорам, но у меня проблемы.onDeviceReady функция не называется

  1. Я установил, что функция onDeviceReady() вызывается, когда «deviceready» событие вызывается, но этот метод никогда не вызывается.

  2. Я попытался вызвать метод App.start() напрямую, но я получаю сообщение об ошибке в консоли, что метод APP.start() не существует.

Благодарим за помощь!

Код для Index.html и App.js ниже:

Index.html

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="format-detection" content="telephone=no" /> 
    <meta name="viewport" 
     content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" /> 
    <script type="text/javascript" charset="utf-8" 
    src="cordova/cordova-2.2.0-android.js"></script> 
    <script type="text/javascript" charset="utf-8" 
    src="framework/utility.js"></script> 
    <script type="text/javascript" charset="utf-8" 
    src="app.js"></script> 
    <link rel="stylesheet" href="framework/base.css" type="text/css" /> 
    <link rel="stylesheet" href="style/style.css" type="text/css" /> 
    <title>Chapter 1 App: Quiz Time</title> 
</head> 
<body> 
    <div class="container" id="rootContainer"> 
    </div> 
    <div id="preventClicks"></div> 
</body> 
</html> 

app.js

document.addEventListener("load",function(){ 

     document.addEventListener("deviceready",onDeviceReady,false); 
    },false); 

    function onDeviceReady() { 
     alert("WOAH!"); 
     start(); 
    } 

    start = function() { 
     PKUTIL.include([ "framework/ui-core.js", "framework/device.js" ], 
       function() { 
        init(); 
       }); 
    } 

    init = function() { 
     PKUI.CORE.initializeApplication(); 
     PKUTIL.loadHTML("views/gameView.html", { 
      id : "gameView", 
      className : "container", 
      attachTo : $ge("rootContainer"), 
      aSync : true 
     }, function(success) { 
      if (success) { 
       gameView.initializeView(); 
      } 
     }); 

     PKUTIL.loadHTML("views/endView.html", { 
      id : "endView", 
      className : "container", 
      attachTo : $ge("rootContainer"), 
      aSync : true 
     }, function(success) { 
      if (success) { 
       endView.initializeView(); 
      } 
     }); 

     PKUTIL.loadHTML("views/startView.html", { 
      id : "startView", 
      className : "container", 
      attachTo : $ge("rootContainer"), 
      aSync : true 
     }, function(success) { 
      if (success) { 
       startView.initializeView(); 
       PKUI.CORE.showView(startView); 
      } 
     }); 
    } 

UPDATE:

  • Изменено type="application/javascript" в `тип = "текст/JavaScript"»

  • добавить deviceready слушателя нагрузки слушателя.

  • Все еще не повезло!

ответ

0

Замените свои метки с:

<script type="text/javascript" ... 

с помощью приложения/JavaScript тип MIME не является стандартным подходом.

Проверьте свой код на наличие синтаксических ошибок (запустите его в Safari или Chrome и т. Д., Если консоль открыта для их просмотра). Я обнаружил, что, когда в PhoneGap ничего не работает, это обычно происходит из-за ошибки JS.

Удалите все сценарии, за исключением того, что вы пытаетесь проверить (строки для установки события deviceready и выполняемой им функции), а затем каждый блок кода и сценарий один за другим, чтобы увидеть, когда он останавливается , Таким образом вы можете изолировать блок кода, который вызывает проблему.

0

Я сам столкнулся с подобной проблемой. Я постараюсь предложить любой совет.

Прежде всего, если вы посмотрите документацию Phonegaps Device Ready, она отмечает, что Typically, you will want to attach an event listener with document.addEventListener once the HTML document's DOM has loaded.. Причиной этого, если вы посмотрите на исходный код, является то, что они фактически переопределяют document.addEventListener с их собственной функцией, которая обрабатывает все привязки deviceready.

Я обнаружил, что когда я загружаю телефонную диску динамически, если бы я добавил своего слушателя событий для deviceready, прежде чем он подключился, он никогда не придет, но если я дождался загрузки элемента сценария, он работал нормально. Обычно, если вы просто работаете с тегами <script>, они фактически загружаются синхронно, поэтому это не проблема.Возможно, что наличие сценариев в элементе body может привести к их загрузке несинхронным образом, поэтому я, вероятно, попытаюсь переместить их в голову или чуть выше </html> и попытаться перейти на более стандартный элемент сценария, например - говорит Генри.

<script type="text/javascript" src="cordova/cordova-2.2.0-android.js"></script> 
<script type="text/javascript" src="framework/utility.js"></script> 
<script type="text/javascript" src="app.js"></script> 
+1

Я сделал эти изменения, но до сих пор не повезло:/ –

0

Ваш JS должен быть, как этот

document.addEventListener("deviceready",onDeviceReady,false);  

function onDeviceReady() { 
    alert("WOAH!"); 
    start(); 
} 

function start() { 
    PKUTIL.include([ "framework/ui-core.js", "framework/device.js" ], 
      function() { 
       init(); 
      }); 
} 

Когда ваш JS является нагрузкой, и Cordova готов, ваша функция onDeviceReady будет выполнена. Эта функция выдает предупреждение, а затем вызывает запуск функции.

+0

Вот код, который я имел в своем распоряжении; он не работал:/ –

+0

вы проверяете свой код на устройстве или в Chrome? – dpfauwadel

+0

На эмуляторе AVD. –

0

Попробуйте изменить

$$(document).on('deviceready', function() { 
    // Your content here 
    }); 

Для

$$(document).on('DOMContentLoaded', function(){ 
    // Your content here 
    }); 
Смежные вопросы