2016-07-25 11 views
0

Ich folgte dieser Antwort https://stackoverflow.com/a/7719185/842837, um JavaScript asynchron zu laden. Wie gebe ich Daten an diese externe Datei weiter?Wie Daten an externe Javascript-Skript übergeben werden, asynchron geladen

Aktuelle Code:

<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> 

Wie sende ich config an externen JS-Datei?

BEARBEITEN Ich ging google Analytics Code. Sie laden auch ihre Skript asynchron und Konfigurationsdaten von 3rd-Party-Website verwenden:

<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> 

Ich brauche das gleiche, in einer besser lesbaren Art und Weise zu tun.

+0

Ein Modulladesystem könnte die Dinge vereinfachen. – gcampbell

+0

Ich mache ein Widget, dass Drittanbieter-Websites in ihren Websites einbetten können. – jerrymouse

+0

Oh richtig. Sie könnten alles in eine Funktion umbrechen, sobald es geladen ist, rufen Sie die Funktion mit einigen Argumenten auf. – gcampbell

Antwort

1

Nein, können Sie nicht Parameter übergeben, wie das und haben das Drehbuch las sie in.

Technisch Sie sie aus dem Tag greifen könnten, aber das wäre ein echtes Chaos sein.

Könnten Sie einfach einen Skriptblock ausgeben, bevor Sie die Datei hinzufügen?

<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> 

Damit wird config Objekt window Namensraum angebracht =>window['config'];

Daher können Sie als Alternative den gleichen Code beibehalten, den Sie haben, jedoch müssen Sie nur var config= durch window.config= ersetzen; Dadurch wird config für externe js sichtbar.

<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>