2016-09-09 7 views
0

私はテストしている単一のhtmlページphonegapアプリケーションを持っています。それは私のブラウザでは完全に動作しますが、PhoneGap CLIを使用して私の電話機でテストすると、完全に機能します。私はそれをWeinreとセットアップしましたが、ブラウザのようにコンソールにエラーを表示しません。とにかく。私は、jsの冒頭で定義したグローバルな空のオブジェクトが未定義として扱われているという事実に絞り込んだので、追加しようとするとコードは単にループを開始することを拒否します。 Chromeでは、ログはオブジェクトとして正しく定義され、完全に機能します。空のグローバルオブジェクトを無視してPhonegap

はここに私のコードです:

var holding_layers_info = {}; 

function my_function() { 
    console.log(typeof holding_layers_info); // this logs undefined on PhoneGap App and object on Chrome log 
    // my loop here, adding values to holding_layers_info, which doesn't run because of the undefined object above 
} 

私は完全にこれに困惑しています、オンライン似た何かを見つけると、それを固定開始する見当がつかないことができません。 var holding_layers_info = new Object();で空のオブジェクトを定義するか、単純にvar holding_layers_info;としておくことで、どちらかといえば違いはありません。

関数内で定義された空のオブジェクトは期待どおりに動作しますが、これをグローバルにする必要があります。

編集:ここに私のindex.htmlの要約版である:私はロード非常に最初のJSスクリプトで

<!doctype html> 
<html> 
    <head> 
     <meta charset="utf-8" /> 
     <meta name="format-detection" content="telephone=no" /> 
     <meta name="msapplication-tap-highlight" content="no" /> 
     <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" /> 
     <!-- This is a wide open CSP declaration. To lock this down for production, see below. --> 
     <!-- <meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *" /> --> 
     <!-- Good default declaration: 
     * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication 
     * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly 
     * Disables use of eval() and inline scripts in order to mitigate risk of XSS vulnerabilities. To change this: 
      * Enable inline JS: add 'unsafe-inline' to default-src 
      * Enable eval(): add 'unsafe-eval' to default-src 
      * Create your own at http://cspisawesome.com 
     --> 
     <!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: 'unsafe-inline' https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *" /> --> 

     <link rel="stylesheet" type="text/css" href="css/ol.css"> 
     <link rel="stylesheet" type="text/css" href="css/index.css" /> 
     <link rel="stylesheet" type="text/css" href="css/fonts.css" /> 
     <link rel="stylesheet" type="text/css" href="css/easy-autocomplete.css" /> 
     <title>La la la</title> 
    </head> 
    <body> 
     <!-- Boring HTML-only page content here --> 

     <script src="https://code.jquery.com/jquery-1.12.4.min.js" 
      integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" 
      crossorigin="anonymous"></script> 
     <script type="text/javascript" src="js/ol.js"></script> 
     <script type="text/javascript" src="js/general.js"></script> 
     <script type="text/javascript" src="js/jquery.easy-autocomplete.min.js"></script> 
     <script type="text/javascript" src="js/index.js"></script> 
     <script type="text/javascript"> 
      app.initialize(); 
     </script> 
    </body> 
</html> 
+0

「私は最初に定義します。いくつかの下敷きの問題のために悪い結果?たとえば、関数などの実行を開始する前に、cordova.jsをインクルードしてアプリを初期化させるようにしましたか? – NoobishPro

+0

@Babydeadうん。この機能はDevice Readyから呼び出され、cordova.jsが含まれています。私は今、このアプリをしばらく開発してきたことを付け加えておきますが、これはうまくいっていますが、これはちょうどどこからも出てきません...なぜChromeとデバイスの違いがありますか? –

+0

ええと...私は知らない。私は自分で現在2つのphonegapアプリケーションを構築していますが、私も問題はありましたが、これもクロームでは受け入れられましたが、最終ビルドでは受け入れられませんでした。私はあなたがやっていることをすることで、多くの問題を抱えてきました。 'var変数= {};'。これは間違いなく、たとえクロムであっても間違いをもたらしました。ホールド、私はちょうど答えに私のデバッグを入れて、実際にエラーを得ることができるので、私たちは次のステップを見つけ出すことができます! – NoobishPro

答えて

1

が、私はデバッグ目的のために上にこの機能を持っていることを確認してください。

//debugging 
var debug = true; 
if (debug) { 
    window.onerror = function (msg, url, linenumber) { 
    alert('Error message: ' + msg + '\nURL: ' + url + '\nLine Number: ' + linenumber); 
    return true; 
    }; 
} 

これは、基本的にコンソールから来るすべてのエラーを基本的に警告します。これによりエラーが発生した場合は、非常に役立つと思います!

これまでの情報では、誰もあなたの質問に実際に答えられることはありません。それはあまりにも曖昧です。私に戻ってくる=)


私はちょうどあなたが知っていることはありませんので、そこにこれをスローするつもりだ: あなたは多分のPhoneGapのテンプレートが付属していますindex.jsからonDeviceReady機能を削除するのを忘れましたか?

この部分について話す:

onDeviceReady: function() { 
    app.receivedEvent('deviceready'); //You should place YOUR starting function here! 
},  
receivedEvent: function(id) { 
    var parentElement = document.getElementById(id); 
    app.receivedEvent('deviceready'); 
    var receivedElement = parentElement.querySelector('.received');//Quite sure you removed this element from the DOM :) 

    listeningElement.setAttribute('style', 'display:none;'); 
    receivedElement.setAttribute('style', 'display:block;'); 

    console.log('Received Event: ' + id); 
} 

あなたが見る、この部分はおそらく削除したDOM要素を選択しています。私は自分のプロジェクトで、存在しない要素に何かを誘発するときに、クロムがあなたのJSを殺してくれることに気づいていません。

そこから自分自身の(開始)関数を呼び出すと、次のようにやや行くだろう:

onDeviceReady: function() { 
    MyInitFunction(); 
} 

を - あなたは残りの部分を削除することができます。 (receivedEvent:関数全体)

小さいサイドノートでは、jQuery 1.xを使用しています。モバイルアプリを作成しているので、古いブラウザの下位互換性を心配する必要はありません。私は現在2.xを使用していますが、新しい(もっと速い)3.xへの切り替えには害はないと思います。

+0

ああ、私の言葉では、このデバッグ機能自体は素晴らしいです!ありがとうございました!ちょうどそれを追加すると、私たちは見るでしょう。再度、感謝します。 –

+0

これは次のようになります: 'エラーメッセージ:TypeError:nullは、グローバル空のオブジェクトを定義する行を参照するオブジェクトではありません( 'parentElement.querySelector'を評価します)。 –

+0

OH!かなりindex.htmlを投稿してください。もっと重要なのは私にとって。どのJSファイルを正確にどこに組み込むのか? - 私は問題が何であるか知っていると思う。 – NoobishPro

関連する問題