将变量加载到异步JS中?

时间:2012-02-29 04:49:19

标签: javascript jquery namespaces

我正在尝试将一些变量放入我正在加载的脚本中。目前,我喜欢

window.myApp = {
    id: ''
};

我正在加载像

这样的javascript
(function() {
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = 'http://blah.com/widget.js';
    var x = document.getElementsByTagName('script')[0];
    x.parentNode.insertBefore(s, x);
  })();

widget.js有名称空间window.myApp,我正试图将.id加入其中?我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

在widget.js中你可以这样做:

var alreadyDefinedProps = window.myApp;

window.myApp = {
   // whatever properties widget.js has currently
}

if (alreadyDefinedProps) {
   for (var prop in alreadyDefinedProps)
       window.myApp[prop] = alreadyDefinedProps[prop];
}

即,存储对现有window.myApp对象的引用,然后将window.myApp设置为另一个对象,然后复制属性。您可以添加if测试来处理在两个JS文件中定义相同属性的情况。

答案 1 :(得分:0)

您需要为要插入的脚本标记的load事件设置事件处理程序,如下所示:

if (s.attachEvent) {
    s.attachEvent("onload", function () {
        window.myApp.id = '';
    });
} else {
    s.addEventListener("load", function () {
        window.myApp.id = '';
    });
}

这为脚本的load事件添加了回调,即使对于IE也是如此。在显示s.async = true;

的行之后插入此代码

答案 2 :(得分:0)

加载脚本后,您可以从myApp对象读取或写入属性。要检测何时加载了异步脚本,您可以在加载时捕获该事件。有关如何执行此操作的详细信息,请参阅this reference