web-dev-qa-db-de.com

gerät funktioniert nicht in PhoneGap-Anwendung, wie?

Ich habe eine einfache PhoneGap-Anwendung als Fallows:

<!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>

Was hier passiert, ist, dass die Warnung alert ('123'); niemals ausgelöst wird. Wenn ich jedoch den anderen JavaScript-Code herausnehme und nur die Warnung hinterlasse, wird er ausgelöst.

Auch wenn ich $(document).ready(function () { alert ('123'); } verwende, erhalte ich die Warnung.

Was passiert hier, warum wird deviceready nicht gefeuert?

Irgendwelche Ideen?

18
Patrioticcow

Versuchen Sie es so:

 document.addEventListener("deviceready", function(){
      alert("123");
 },true);
17
gprathour

Was von @GPRathour zur Verfügung gestellt wird, funktioniert, da document.addEventListener() auf deviceready wartet. Wenn dies wahr ist, wird Ihre Alert-Funktion ausgeführt. Ich habe aus zwei Gründen nicht so gearbeitet, wie Sie es hatten:

1) Als das DOM geladen wurde und zu Ihrem Body-Tag kam, rief es OnDeviceReady () an, und der Listener erhielt nie den Anruf, sodass Phonegap nicht weiß, dass es betriebsbereit ist.

2) Sie müssten Ihren Listener innerhalb einer Funktion aufrufen und 'false' verwenden:

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

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

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

Schauen Sie sich die phonegap-API an, um herauszufinden, warum in Ihrem Listener "false" anstelle von "true" verwendet wird. Dies hat etwas mit der Standardeinstellung zu tun. Es ist jedoch lesenswert, zu verstehen, wie Phonegap-Listener funktionieren.

16
Godzilla74

Nur für den Fall, dass Sie das gleiche Problem wie ich haben, wusste ich nicht, dass das Skript cordova.js in Ihre index.html aufgenommen werden muss. Sie müssen weder die Datei noch die Referenz angeben. Fügen Sie einfach folgende Zeile ein:

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

anschließend verwendet Cordova die Bibliothek beim Kompilieren. Danach wird das Ereignis ausgelöst.

9

dieser Code funktioniert für mich

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

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

glückliche Codierung .......

6
kathir

Wenn Sie PhoneGap 3.0 mit WP8 verwenden, funktioniert Device Ready nicht, da Phonegap.js NICHT in der Visual Studio-Lösung enthalten ist. 

Die Lösung ist, es vorerst manuell einzubinden.

5
Michael

Der Hauptgrund für ein ungebranntes ondeviceready -Ereignis auf einer oder mehreren Plattformen ist der Versuch, Cordova/Phonegap-Js der falschen Plattform zu verwenden.

2
Idan Gozlan

Fügen Sie Ihren Ereignis-Listener für Geräte in Ihrem doc-ready hinzu ...

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

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

Sie möchten nicht onDeviceReady () aufrufen, da dies die Funktion ausführt, wenn Sie den Listener hinzufügen.

2
nodrog

In meinem Fall musste ich Meta http-equiv = "Content-Security-Policy" content = "entfernen.".

1
A. Soufi

Überprüfen Sie die Versionen der Cordova/phonegap-Bibliothek/jar-Dateien, die Sie mit dem Projekt (unter libs) hinzugefügt haben, und das Skript <script src = "~/Scripts/cordova-3.0.0.js" />, auf das Sie sich beziehen die HTML-Dateien. Wenn es keine Übereinstimmung gibt, kann das <script /> es möglicherweise nicht im Projekt verweisen. Damit Cordova seine Funktionalität nicht ausführt.

Ich sehe in Ihrem Code ein Problem, in der Methode müssen Sie hier onDeviceReady() gleich hinzufügen:

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

das hat für mich funktioniert !!

0
Tales Born

Stellen Sie sicher, dass der Pfad unten korrekt ist und beide in html enthalten sein müssen:

        <script type="text/javascript"  src="cordova.js"></script>
        <script src="js/jquery-1.11.2.min.js"></script>

  <script type="text/javascript">
        $(document).ready(function(){
        document.addEventListener("deviceready", onDeviceReady, false);
        });

        function onDeviceReady() {
        alert("inside onDeviceReady");
        }
        </script>
0
KOTIOS

Sie binden einen Handler an die Einrichtung, bevor Sie den Handler definiert haben.

Richtig wäre:

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

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

Und natürlich sollte Ihre Datei phonegap-2.0.0.js (oder eine andere Version) vor diesem Punkt in der Datei enthalten sein.

0
Wytze