javascript
  • asynchronous
  • 2016-07-25 2 views 0 likes 
    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> 
    

    Как я отправить config внешних JS файл?

    EDIT Я шел, хотя Google Analytics code. Они также загружать их сценарий асинхронно, а также использовать конфигурационные данные с веб-сайта 3 партии:

    <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 пространства имен =>window['config'];

    Таким образом, в качестве альтернативы вы можете оставить тот же код, что и у вас, однако вам нужно просто заменить 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> 
    
    Смежные вопросы