3

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

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

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

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

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

有人知道什么可能导致这种情况,以及我应该如何解决它?网站地址是http://www.husbanken.no/

4

1 回答 1

0

回调在每次资源加载时发生一次,这意味着它将在加载中执行一次: ['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..")}
}])

让我知道这是否有帮助:)

于 2013-09-15T20:25:17.950 回答