2

我正在动态创建一些这样的脚本:

  var js1 = document.createElement('script');
  js1.type = 'text/javascript';
  js1.src = '/js-1.js';
  docmuent.body.appendChild(js1);
  js1.onload = function() {
     var js2 = document.createElement('script');
     js2.type = 'text/javascript';
     js2.src = '/js-2.js';
     document.body.appendChild(js2);
  };

这是我的规格:

  it('Tests inject script', function() {
    expect($("script[src*='/js-1.js']").length).toBeGreaterThan(0);
    expect($("script[src*='/js-2.js']").length).toBeGreaterThan(0);
  });

对 js-2 的测试总是失败。我如何监视 js-1 onload 事件?

4

2 回答 2

0

您不应该在 onload 事件中添加标签创建代码。如果我没记错的话,IE 只会在脚本标签添加到 DOM 后立即开始下载文件。

我的建议是将 onload 事件中的所有内容移到外部,并且在 onload 事件中可能有一个处理函数来确定文件何时完成加载。这样,您唯一的问题将是在 onload 事件中测试函数的调用。您可以通过模拟 document.createElement('script'); 来做到这一点。并返回一个你可以使用的假对象,比如“fakeObject.onload()”,如果你的内部辅助函数被调用,则可以进行间谍活动。

于 2014-07-01T11:37:13.490 回答
0

我认为问题可能出在您的订购上。您应该创建script标签,将其添加到body,设置onload,然后设置src.

var js1 = document.createElement('script');
js1.type = 'text/javascript';
docmuent.body.appendChild(js1);
js1.onload = function() {
   var js2 = document.createElement('script');
   js2.type = 'text/javascript';
   document.body.appendChild(js2);
   js2.src = '/js-2.js';
};
js1.src = '/js-1.js';
于 2013-12-30T11:35:06.583 回答