3

Modernizr.load(別名YepNopeJS)を使用してあらゆる種類の外部スクリプトをロードしているサイトがあります。それらのスクリプトの1つは、非常に単純なコールバック関数を備えた小さな統計スクリプト(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' is undefined」(Internet Explorer 9)というエラーメッセージが表示されます。Firefox15とChrome22でエラーが発生することはありません。ページをリロードするときにエラーが発生することはありません。

これはある種のタイミングエラーのようです。IE開発ツールでは、エラーが発生した時点でx.jsファイルのソースは空です。これは、YepNope(http://yepnopejs.com/#twice)のダブルリクエスト「バグ」に関連しているようです。IEでは、ロードされたすべてのJSファイルへの2つの参照があり、最初のファイルは常に空です。

このエラーをトリガーする完全な例を作成したかったのですが、ページの複雑さに関係しているようです。ページの簡略化されたバージョンがこのエラーをトリガーすることはありません。

誰かがこれを引き起こしている可能性があること、そして私がそれを修正する方法について何か知っていますか?サイトのアドレスはhttp://www.husbanken.no/です。

4

1 に答える 1

0

コールバックはリソースのロードごとに 1 回発生します。つまり、ロード中の n に対して 1 回実行されます: ['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 に答える