我正在通过我的第一个phonegap教程,但我遇到了问题。
我已经设置了在触发“deviceready”事件时调用onDeviceReady()函数,但是从不调用该方法。
我尝试直接调用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);
}
});
}
更新:
将type="application/javascript"
更改为“type =”text / javascript“'
在加载侦听器中添加deviceready listener。
仍然没有运气!
答案 0 :(得分:0)
将您的代码替换为:
<script type="text/javascript" ...
使用application / javascript mime类型不是标准方法。
检查代码是否存在语法错误(在Safari中运行它,或者在打开控制台的情况下运行Chrome等以查看它们)。我发现当事情在PhoneGap中不起作用时,通常是因为某个地方出现了JS错误。
删除除了你要测试的东西之外的所有脚本(设置deviceready事件的行以及它运行的函数),然后逐个引入每个代码块和脚本以查看它何时停止。这样,您就可以隔离导致问题的代码块。
答案 1 :(得分: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
的所有绑定。
我发现自己,当我动态加载phonegap时,如果我在它挂钩之前添加我的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>
答案 2 :(得分: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将被执行。此功能将发出警报,然后调用函数start。
答案 3 :(得分:0)
尝试更改
$$(document).on('deviceready', function() {
// Your content here
});
对于
$$(document).on('DOMContentLoaded', function(){
// Your content here
});