2016-11-07 10 views
1

PhoneGapでRequireJs、Backbone、jQueryを使用してモバイルアプリケーションを開発しようとしていますが、requirejsスクリプトタグを含めると次のような問題が発生しています。PhonegapモバイルアプリケーションでSocket.io変数が定義されていません

<script data-main="js/app" src="node_modules/requirejs/require.js</script> 

私はこれを含めた後、私は次のエラーを取得する:

ReferenceError: io is not defined. 

私はsocket.ioを使用していないが、私はPhoneGapのは、ブラウザでページをリフレッシュするためにそれを使用していると思います。

これは私のindex.htmlファイルです:私はPhoneGapのバージョン6.3.4を使用してい

requirejs.config({ 

    baseUrl: 'js', 

    shim: { 
     'socket.io': { 
      exports: 'io' 
     }, 
     'underscore': { 
      exports: '_' 
     }, 
     'backbone': { 
      deps: [ 
       'underscore', 
       'jquery' 
      ], 
      exports: 'Backbone' 
     } 
    }, 

    paths: { 

     jquery: 'jquery.min', 
     underscore: 'lodash.min', 
     backbone: 'backbone', 
     socketio: '../socket.io/socket.io' 

     // package: 'node_modules' 
    } 

    // map: { 
    // 
    //  '*': { 
    //   'jquery': 'private/jquery' 
    //  }, 
    // 
    //  'private/jquery': { 
    //   'jquery': 'jquery' 
    //  } 
    // } 
}); 

<!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 *" /> 

    <title>Hello World</title> 
</head> 
<body> 

    something nice 

    <!-- Content --> 

    <script type="text/javascript" src="cordova.js"></script> 
    <script data-main="js/app" src="node_modules/requirejs/require.js"></script> 
</body> 
</html> 

これは私のjs/app.jsファイルです。

エラーを取り除くために何をすべきですか教えてください。

ありがとうございました!

答えて

1

私はこれらの記事を読むことによってそれを解決するために管理している:

は、ここに私の修正です:

<script type="text/javascript" src="cordova.js"></script> 
    <script type="text/javascript"> 

     // Fixes "Uncaught ReferenceError: io is not defined". 
     // We need to load RequireJs after socket.io has been loaded. 

     function injectRequireJs() { 
      var h = document.getElementsByTagName('body')[0]; 
      var s = document.createElement('script'); 
      s.type = 'text/javascript'; 
      s.src = 'node_modules/requirejs/require.js'; 
      s.setAttribute('data-main', 'js/bootstrap'); 
      h.appendChild(s); 
     } 

     setTimeout(function(){ 
      injectRequireJs(); 
     }, 1); 

    </script> 
関連する問題