如何强制在动态加载的javascript中初始化的变量对其他(静态)脚本可见

时间:2014-04-02 16:38:09

标签: javascript html5-audio dynamically-generated

我有一些代码允许音频库(如Audiolet.js和应用程序javascript文件)动态加载到浏览器中,并且(最终)由用户提供的数据驱动。这个想法是这样的音频库应该由用户交换。

我从DOM检查器看到,虽然上述两个文件都已正确加载,但似乎都没有访问,甚至也无法访问。

应用程序代码被放置在一个包装函数中,该函数又被分配给一个全局变量(sound_generator),该变量先前在其他地方的专用(静态)头文件中初始化为null:

sound_generator = function () {
   // Audiolet application code
   function play_demo(){....}
   //    :         :         :
return {
    playDemo : function() {
        play_demo();
    },
    test : function() {
                    alert("yessss!");
            } 
}
};

从另一个地方访问,静态代码,sound_generator.test()引发

ReferenceError: sound_generator is not defined.

我尝试让这个功能自动执行。

sound_generator = function () {
   // Audiolet application code
}();

- >再次,没有定义ReferenceError:sound_generator。

我删除了尾随括号并尝试将所有这些放在onload()语句中:

window.onload=function(){
  sound_generator = function () {
     // Audiolet application code
  };
};

- >再次,没有定义ReferenceError:sound_generator。

通过调试,我尝试了其他无意义的替代方案,例如将sound_generator更改为函数,并使用

document.addEventListener("DOMContentLoaded", sound_generator, false);

注意日志输出。不行。

甚至尝试过等效的jQuery方法,但到目前为止还没有改进。

这不是异步加载延迟的问题,而且从其他地方的行为来看,我没有理由相信在动态加载后实例化任何全局变量。

无法访问动态加载的代码。我如何强制执行此代码,以便单页应用程序中的其他位置的静态脚本可以拾取全局变量和嵌入式调用?

0 个答案:

没有答案