web-dev-qa-db-ja.com

deviceReadyはPhoneGapアプリケーションで動作しません。

私は休閑地として単純な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が解雇されないのですか?

何か案は?

18
Patrioticcow

この方法で試してください:

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

document.addEventListener()devicereadyをリッスンし、trueの場合はアラート関数を実行しているため、@ GPRathourが提供するものが機能します。次の2つの理由で、私はあなたがそれをどのように持っているのかうまくいきませんでした。

1)DOMが読み込まれ、bodyタグに到達したとき、OnDeviceReady()を呼び出していたため、リスナーは呼び出しを受けなかったため、phonegapは実行準備ができていることを知りません。

2)関数内からリスナーを呼び出して、「false」を使用する必要があります。

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

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

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

リスナーでtrueではなくfalseを使用する理由についてはphonegap APIを確認してください。デフォルト設定と関係がありますが、phonegapリスナーがどのように機能するかを理解する価値があります。

16
Godzilla74

私と同じ問題が発生した場合に備えて、index.htmlにcordova.jsスクリプトを含める必要があるとは知りませんでした。ファイルまたは参照を提供する必要はありません。次の行を含めるだけです。

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

そして、Cordovaはコンパイル時にライブラリを使用し、その後イベントがディスパッチされます。

10

このコードは私のために働く

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

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

ハッピーコーディング.......

6
kathir

PhoneGap 3. with WP8を使用する場合、Phonegap.jsはVisual Studioソリューションに含まれていないため、Device Readyは機能しません。

解決策は、現時点では手動で含めることです。

5
Michael

1つ以上のプラットフォームでondevicereadyイベントが発生しない主な理由は、間違ったプラットフォームのcordova/phonegap jsを使用しようとしたときです。

2
Idan Gozlan

Doc ready内にdevicereadyのイベントリスナーを追加します...

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

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

リスナーを追加すると関数が実行されるため、onDeviceReady()を呼び出したくありません...

2
nodrog

私の場合、メタhttp-equiv = "Content-Security-Policy" content = "...を削除する必要がありました.

1
A. Soufi

プロジェクトで追加したCordova/phonegap library/jarファイルのバージョン(libsの下)と、参照している<script src = "〜/ Scripts/cordova-3.0.0.js" />スクリプトを確認します。 HTMLファイル。不一致がある場合、<script />はプロジェクトでそれを参照できない可能性があります。そのため、コルドバはその機能の実行に失敗します。

私はあなたのコードで1つの問題を見ています、メソッドでは、ここにonDeviceReady() equalsを追加する必要があります:

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

それは私のために働いた!!

0
Tales Born

以下のパスが正しいことを確認し、両方をhtmlに含める必要があります:

        <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

ハンドラーを定義する前に、ハンドラーをdevicereadyにバインドしています。

正しいでしょう:

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

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

そして、明らかに、この時点の前にphonegap-2.0.0.jsファイル(または他のバージョン)をファイルに含める必要があります。

0
Wytze