2015-01-09 3 views
13

Ich habe mir diesen Kopf für ein paar Tage geschlagen. Nachdem beim Erstellen eines neuen FileTransfer() -Objekts eine Anzahl von "Objekt nicht definiert" -Fehlern gefunden wurde, scheint das Problem einfacher zu sein - irgendwie löst das DeviceReady-Ereignis nicht aus.Cordova DeviceReady nicht feuern

Stack Overflow hat eine Menge Treffer zu diesem Thema, aber die meisten von ihnen haben mit Pre-3.x Cordova Builds zu tun, die eine andere Architektur hatten (ich bin auf 4.1.2). Ich habe die Vorschläge in den neueren Themen ausprobiert, die ich finden konnte - Entfernen und Hinzufügen von Plugins, Aktualisieren von Cordova, etc. - ohne Erfolg. Um zu versuchen, das Problem zu isolieren, ich habe den Startcode kommentiert, um nur ein paar Zeilen:

Index.HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Blah</title> 
    <meta charset="utf-8"/> 
    <meta name="viewport" content="initial-scale=1, user-scalable=no, minimum-scale=1, maximum-scale=1"> 
    <link href="res/topcoat/css/topcoat-mobile-light.min.css" rel="stylesheet"> 
    <link href="res/css/styles.css" rel="stylesheet"> 
    <link href="res/css/pageslider.css" rel="stylesheet"> 
    <script data-main="js/main" src="lib/require.js"></script> 
</head> 

main.js:

require(["app/Application"], function (Application) { 
    "use strict"; 

    document.addEventListener("deviceready", function(){ 
     $('body').html("<p>device is ready</p>"); 
    },true); 

    $('body').html("<p>waiting...</p>"); 
}); 

Anstatt "Gerät ist bereit" im Körper nach einem Bit anzuzeigen, t Der Bildschirm zeigt nur "Warten ..." an. Dies geschieht sowohl im iOS-Emulator als auch im Browser (cordova emuliert Browser).

Cordova Info:

$ cordova -v 
4.1.2 

Plugin Info:

$ cordova plugins 
org.apache.cordova.globalization 0.3.3 "Globalization" 

(ich die gleichen Ergebnisse erhalten, wenn die Globalisierung nicht da ist).

Gibt es einen anderen Ort, an dem ich suchen sollte? Ich laufe von der Kommandozeile, wenn das einen Unterschied macht.

Antwort

40

denke ich, in diesem Fall, dass Sie cordova.js in Ihrer Anwendung enthalten müssen, weil ich nicht cordova.js in Ihrem Beispiel sehen Sie

<script src="cordova.js"></script> 

Hinweis:Weg-cordova.js hängt davon ab, wo es sich in Ihrer App

6

Das hat zunächst nicht für mich behoben, bis ich

entfernt habe
< meta http-equiv="Content-Security-Policy" content=".."/> 
+1

Dank erwähnt - Dies führte mich zu meinem Problem, und es könnte auf die anfängliche Verbindung gebracht werden Problem auch. Ich habe dies auf iOS gefunden, aber nicht auf Android, wenn eine Ihrer JavaScript-Dateien auf ein Remote-Skript oder Stylesheet verweist, dann muss es in der Content-Security-Policy aufgeführt sein. Mit Android erhalten Sie eine Fehlermeldung in der Konsole. Mit iOS stirbt es einfach still und zeigt nicht an, was das Problem ist. Das Problem ist, dass es nicht zu einem der referenzierten Skripte gelangen kann. – ferdil

+0

Danke für den Tipp. Warum passiert es? Ich habe keine Remote-Skripte –

0

Ich hatte vor kurzem das gleiche Problem, aber in meinem Fall cordova.js war bereits richtig enthalten.

Schließlich, was für mich gearbeitet wurde ein einfaches remove und add der ios Plattform:

cordova platform remove ios 
cordova platform add ios 

Es schon eine ganze Weile her, seit ich hatte die ios Plattform und andere wichtige Veränderungen stattgefunden komplett neu gebaut hatte während dieser Zeit (Cordova Upgrade, XCode Upgrade, etc). Es ist möglich, dass mein Build config.xml oder ios nicht mit den neuesten Cordova-Anforderungen übereinstimmt.

0

Ich habe versucht, dieses Problem für DAYS zu beheben, und ich habe schließlich deviceready ausgelöst. Das Problem war, dass ich die js Object erweitert hatte, um meine eigenen Verbergen- und Zeigen-Befehle einzufügen. Das Entfernen dieser Linien erlaubt deviceready auslösen:

Object.prototype.hide = function(){ 
    this.style.display = 'none'; 
} 

Object.prototype.show = function(){ 
    this.style.display = 'initial'; 
} 

Anmerkung: Ich hatte auch die Linie haben <script src="cordova.js"></script> wie von Alexander T