deviceReady无法在PhoneGap应用程序中运行,如何操作?

时间:2012-01-24 06:13:41

标签: javascript jquery android cordova

我有一个简单的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 个答案:

答案 0 :(得分:17)

以这种方式尝试:

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

答案 1 :(得分:16)

@GPRathour提供的功能是因为document.addEventListener()正在侦听deviceready,如果是,则运行警报功能。由于两个原因,我没有按你的方式工作:

1)当DOM加载并进入你的body标签时,它正在调用OnDeviceReady()并且监听器从未接到调用,因此phonegap不知道它已准备好运行。

2)你必须在一个函数中调用你的监听器并使用'false':

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

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

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

查看phonegap API,了解为什么在监听器中使用false而不是true,与默认设置有关,但值得阅读以了解phonegap监听器的工作原理。

答案 2 :(得分:9)

如果您遇到与我相同的问题,我不知道是否需要在index.html中包含cordova.js脚本,您不必提供文件或引用,只需包含此内容行:

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

然后Cordova将在编译时使用该库,之后将调度该事件。

答案 3 :(得分:6)

此代码适用于我

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

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

快乐的编码.......

答案 4 :(得分:5)

PhoneGap 3.0 WP8 一起使用时,设备就绪无法正常工作,因为Visual Studio解决方案中不包含 Phonegap.js

解决方案是暂时手动包含它。

答案 5 :(得分:2)

在一个或多个平台上解决ondeviceready事件的主要原因是当你尝试使用错误平台的cordova / phonegap js时。

答案 6 :(得分:2)

为你准备好的doc ...中的deviceready添加事件监听器。

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

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

您不想调用onDeviceReady(),因为这会在您添加侦听器时运行该函数...

答案 7 :(得分:1)

检查随项目添加的Cordova / phonegap库/ jar文件的版本(在libs下)和&lt; script src =“〜/ Scripts / cordova-3.0.0.js”/&gt;您在HTML文件中引用的脚本。如果存在不匹配,则&lt;脚本/&GT;可能无法在项目中引用它。因此,cordova无法执行它的功能。

答案 8 :(得分:1)

就我而言,我需要删除 meta http-equiv =“Content-Security-Policy”content =“...

答案 9 :(得分:0)

在定义处理程序之前,您正在将处理程序绑定到deviceready。

正确的是:

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

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

显然你的phonegap-2.0.0.js文件(或其他版本)应该在此之前包含在文件中。

答案 10 :(得分:0)

确保以下路径正确,并且两者都需要包含在html中:

Sheets("5. Resume").Select

ActiveSheet.PivotTables("PivotTable1").PivotSelect "'Tarea IS'[All]", _
    xlLabelOnly, True
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh

ActiveSheet.PivotTables("PivotTable2").PivotSelect "'Tarea IS'[All]", _
    xlLabelOnly, True
ActiveSheet.PivotTables("PivotTable2").PivotCache.Refresh

Sheets("6. Reg Err").Select
ActiveSheet.PivotTables("PivotTable3").PivotCache.Refresh 

答案 11 :(得分:0)

我在您的代码中看到一个问题,在方法中,您需要在此处添加onDeviceReady()等于:

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

对我有用!!

答案 12 :(得分:-12)

PhoneGap示例的最大问题是不正确的javascript语法。请小心这个..对于这个问题,onDeviceReady应该有大括号......

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