2017-05-17 7 views
0

SDKを使用して別のプログラムの拡張機能をビルドしようとしています。コードはJavaScriptで書かれています。私のコードがこの変数にアクセスできないのはなぜですか?

SDKのビルトインrequireJS機能を使用して外部ライブラリ(Highcharts)にロードしています。

しかし、ハイチャート変数にHighcharts変数にアクセスしようとすると、ブラウザでその変数が定義されていないとわかります。

私はconsole.log(これ)を自分のコードに書き込んだ後、ロードしておかなければならず、画像の下の出力を見ることができます。ハイチャートが読み込まれたようです。 console.log(EPCMPROXY)を試してみると、私はそのオブジェクトを取得しますが、console.log(Highcharts)を試してみると、私は定義されません。ブラウザウィンドウのコンソールを開き、ハイチャートを手動で入力すると、オブジェクトが返されます。間違ったことをやっているのですか、Highchartsを間違って参照していますか?同じ範囲にいるとき、私は1つのオブジェクト(EPCMPROXY)にアクセスできますが、他のオブジェクト(ハイチャート)にはどのようにアクセスできますか?

コード:はconsole.logの

console.log(this); 
console.log(Highcharts); 
console.log(EPCMPROXY); //some var generated by the page, used as example here 

出力(本):はconsole.logの

undefined 

出力:にconsole.log(Highcharts)の

j {owner: f, init: function, componentDeleted: function, beforeUpdate: function, afterUpdate: function…} 
    $:function() 
     arguments : null 
     caller : null 
     length : 0 
     name : "" 
     prototype : Object 
     __proto__ : function() 
     [[FunctionLocation]] : combined_static_includes_1.jsversion=20170105152024:25 
     [[Scopes]]:Scopes[2] 
      0 : Closure (a) 
      1 : Global 
       $ : function (e,i) 
       AsyncHandleJavascriptError : function AsyncHandleJavascriptError(a) 
       EPCMPROXY : Object 
       ES6Promise : Object 
       Highcharts : Object 

出力(EPCMPROXY):

Object 
    ... 

Console Screenshot

+0

コードの[mcve]はできますか? – evolutionxbox

+0

RequireJSを使用している場合は、ハイチャートをモジュールとしてロードしたいと考えています。 –

+0

@evolutionxboxコードを追加しましたが、コードがここでのポイントではないと思います。ポイントは明確にそこにあるときにハイチャートを正しく参照するにはどうすればいいのですか(それは私のために働いていないようです)。 –

答えて

0

問題はライン「はconsole.log(Highcharts)」が実行されたとき、それは実際に(原因私のrequireJSセットアップの問題のために)まだロードされていなかったということです。私が "console.log(this)"を実行したときに見ることができる理由は、dsfqが指摘しているように、非同期で実行されるため、後で読み込まれた可能性のあるオブジェクトを示していることです。スクリーンショットで見ることができる青色の「i」アイコンは、実際にはChromeのツールチップで、「値はすぐに評価されました」と表示されます。

関連する問題