2016-07-25 8 views
0

私はこの回答https://stackoverflow.com/a/7719185/842837に続いて、JavaScriptを非同期的に読み込みました。どのようにしてこの外部ファイルにデータを渡すのですか?非同期にロードされた外部のJavaScriptスクリプトにデータを渡す方法

現在のコード:

<script id="js-widget-o2ba1y" type='text/javascript'> 
    (function() { 
     function async_load(){ 
      var config = { 
       'module': 'hyperdesign', 
       'user-name': 'John Doe', 
       'user-email': '[email protected]' 
      }; 
      var id = "js-widget-o2ba1y"; 
      var embedder = document.getElementById(id); 
      var s = document.createElement('script'); 
      s.type = 'text/javascript'; 
      s.async = true; 
      var u = 'http://external.javascript.file.js'; 
      s.src = u + (u.indexOf("?") >= 0 ? "&" : "?") + 'ref=' + encodeURIComponent(window.location.href); 
      embedder.parentNode.insertBefore(s, embedder); 
     } 

     if (window.attachEvent) 
      window.attachEvent('onload', async_load); 
     else 
      window.addEventListener('load', async_load, false); 
    })(); 
</script> 

私はjsの外部ファイルにconfigを送ってどのように?

編集 私はgoogle analyticsコードを使用していました。彼らはまた、非同期的にそのスクリプトをロードし、サードパーティのWebサイトから設定データを使用します。私は、読みやすいように、同じことを行う必要があり

<script> 
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 

ga('create', 'UA-XXXXX-Y', 'auto'); 
ga('send', 'pageview'); 
</script> 

+0

モジュールをロードするシステムによって物事が単純化される場合があります。 – gcampbell

+0

私はサードパーティのウェブサイトが自分のサイトに埋め込むことができるウィジェットを作っています。 – jerrymouse

+0

ああ。あなたは関数内でそれをすべてラップすることができますし、ロードされると関数をいくつかの引数で呼び出すことができます。 – gcampbell

答えて

1

いいえ、あなたがそのようなパラメータを渡し、スクリプトがそれらを読むことはできませんが。

技術的にはあなたがタグからそれらをつかむことができ、それは本当の混乱になります。

ファイルを含める前にスクリプトブロックを出力するだけでいいですか?それにより

<script type="text/javascript"> 
      var config = { 
       'module': 'hyperdesign', 
       'user-name': 'John Doe', 
       'user-email': '[email protected]' 
      }; 

</script> 
<script id="js-widget-o2ba1y" type='text/javascript'> 
    //you code 
    </script> 

configオブジェクトは=>window['config']window名前空間に取り付けられています。

したがって、同じコードをそのまま使用できますが、var config=window.config=に置き換えるだけで済みます。それによって、configが外部jsに表示されます。

<script id="js-widget-o2ba1y" type='text/javascript'> 
    (function() { 
     function async_load(){ 
      window.config = { 
       'module': 'hyperdesign', 
       'user-name': 'John Doe', 
       'user-email': '[email protected]' 
      }; 
      var id = "js-widget-o2ba1y"; 
      //-----rest of code 
</script> 
関連する問題