устройство не работает в приложении PhoneGap, как? - PullRequest
18 голосов
/ 24 января 2012

У меня есть простое приложение PhoneGap в виде паров:

<!DOCTYPE HTML>
<html>
    <head>
        <title>PhoneGap powered App</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="css/jquery.mobile-1.0.min.css" />
        <script type="text/javascript" charset="utf-8" src="phonegap-1.3.0.js"></script>
        <script src="js/jquery-1.7.1.min.js"></script>
        <script src="js/jquery.mobile-1.0.min.js"></script>


    <script type="text/javascript" charset="utf-8">

        document.addEventListener("deviceready", onDeviceReady, true); 
        function onDeviceReady() {
            alert ('123');
        }
    </script>

    </head>
    <body onload="onDeviceReady()">
        <div data-role="page">

            <div data-role="header">
                <h1>title</h1>
            </div><!-- /header -->

            <div data-role="content">   
                <h2>Begin by inserting your credentials.</h2>
                ...
            </div><!-- /content -->

        </div><!-- /page -->

        <script type="text/javascript" charset="utf-8">
            $(document).ready(function () {

            });
        </script>
    </body>
</html>

Здесь происходит то, что предупреждение alert ('123'); никогда не срабатывает.Но если я извлекаю другой код JavaScript и оставляю только предупреждение, оно срабатывает.

Также, если я использую $(document).ready(function () { alert ('123'); }, я получаю предупреждение.

Что здесь происходит, почему deviceready не уволят?

Есть идеи?

Ответы [ 13 ]

17 голосов
/ 24 января 2012

Попробуйте так:

 document.addEventListener("deviceready", function(){
      alert("123");
 },true);
16 голосов
/ 30 января 2012

То, что предоставил @GPRathour, работает, потому что document.addEventListener() прослушивает deviceready, затем, если true, запускает вашу функцию оповещения.Я не работал так, как у вас, по двум причинам:

1) когда DOM загружался и доходил до вашего тега тела, он вызывал OnDeviceReady (), и слушатель никогда не получал вызов, поэтому phonegap нене знаю, готово ли оно к запуску.

2) вам нужно было бы вызвать вашего слушателя из функции и использовать 'false':

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

function onDeviceReady(){
  alert('123');
}

<body onload="onDeviceReady()"></body>

Узнайте, почему API Phonegap объясняет, почемуиспользование false вместо true в вашем прослушивателе связано с настройкой по умолчанию, но стоит прочесть, чтобы понять, как работают прослушиватели PhoneGap.

10 голосов
/ 10 августа 2015

На случай, если у вас возникнет та же проблема, что и у меня, я не знал, нужно ли включать сценарий cordova.js в ваш index.html, вам не нужно предоставлять файл или ссылку, просто включите это строка:

<script type="text/javascript" charset="utf-8" src="cordova.js"></script>  

и затем Cordova будет использовать библиотеку при компиляции, после чего событие отправляется.

6 голосов
/ 08 апреля 2014

у меня этот код работает

<body onload="init()"></body>

function init() {
    document.addEventListener("deviceready", onDeviceReady, false);
}
function onDeviceReady() {
    // Now safe to use the Cordova API
}

счастливое кодирование .......

5 голосов
/ 23 августа 2013

При использовании PhoneGap 3.0 с WP8 Device Ready не будет работать, поскольку Phonegap.js НЕ ВКЛЮЧЕНО в решение Visual Studio.

Решение состоит в том, чтобы включить его вручную.

2 голосов
/ 13 сентября 2013

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

<script type="text/javascript" charset="utf-8">
    $(document).ready(function () {
         document.addEventListener("deviceready", onDeviceReady, true); 
    });

    function onDeviceReady() {
        alert ('123');
    }
</script>

Вы не хотите вызывать onDeviceReady (), так как это будет запускать функцию при добавлении прослушивателя ...

2 голосов
/ 16 ноября 2012

Основная причина необоснованного события ondeviceready на одной или нескольких платформах - это когда вы пытаетесь использовать cordova / phonegap js не на той платформе.

1 голос
/ 11 августа 2016

В моем случае мне нужно было удалить мета http-equ = "Content-Security-Policy" content = "...

1 голос
/ 03 октября 2013

Проверьте версии файлов библиотеки / jar Cordova / phonegap, которые вы добавили вместе с проектом (под libs), и сценарий , который вы ссылаются в файлах HTML. Если есть несоответствие, не сможет ссылаться на него в проекте. Так что Кордова не в состоянии выполнить свою функциональность.

0 голосов
/ 04 января 2018

Я вижу в вашем коде одну проблему, в методе вам нужно добавить onDeviceReady() равно здесь:

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

, который работал для меня !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...