YepNopeJS:在小型JS文件完全加载之前触发回调

时间:2012-08-29 16:50:15

标签: javascript undefined modernizr yepnope

我有一个使用Modernizr.load(又名YepNopeJS)加载各种外部脚本的站点。其中一个脚本是一个小型统计脚本(3,5 kB未压缩),具有非常简单的回调函数:

Modernizr.load({
  load: 'http://res.xtractor.no/x.js',
  callback: function() { _pxReg(); }
});

_pxReg只是x.js脚本中定义的函数。在大约50%的页面中,我收到错误消息“Undefined variable:_pxReg”(Opera 12)或“'_pxReg'未定义”(Internet Explorer 9)。 Firefox 15和Chrome 22从不出错。重新加载页面时不会发生错误。

这似乎是某种时间错误。在IE开发人员工具中,x.js文件的源在发生错误时为空。这似乎与YepNope(http://yepnopejs.com/#twice)中的双重请求“bug”有关,因为在IE中你得到两个对每个加载的JS文件的引用,其中第一个始终为空。

我本来希望生成一个触发此错误的完整示例,但它似乎与页面的复杂性有关。页面的简化版本永远不会触发此错误。

有没有人知道造成这种情况的原因,以及我该如何解决?网站地址为http://www.husbanken.no/

1 个答案:

答案 0 :(得分:0)

每次资源加载都会发生一次回调, 意味着它将在加载中执行一次n:['x.js','y.js']

如果你使用yepnope.js加载资源(基本上是Modernizr.load更多 能力:前缀,超时等等) 并提供回调,你可以捕捉到的密钥 关闭并执行你的功能:

yepnope([{
    load : {'x':'//x.js'},
    callback : function(url, result, key){
        if("x" === key && result === true) { _pxReg() };
    },
    complete : function(){ console.log("all done..")}
}])

请告诉我这是否有帮助:)