0

LABjsでいくつかのテストケースを行ったとき、いくつかの問題が発生しました。コードは次のとおりです。

$LAB.script('http://code.jquery.com/jquery-1.8.0.min.js')
    .script('http://id.qq.com/js/10001/simple.js');

APIの説明によると、jquery-1.8.0.min.jsとsimple.jsの実行順序は保証されていません。jquery-1.8.0.min.js をフィドラーでブロックしました。boserverd は次のとおりです。

  1. IE8でも問題なく動作し、simple.jsのダウンロードが終わるとすぐに実行されました。
  2. Chrome 20 では、jquery-1.8.0.min.js のダウンロードが完了して実行されるまで、simple.js は実行されませんでした。

バグですか?

次に、クロム20で別のテストを行いました。コードは次のとおりです。

var script = document.createElement('script');
script.type = 'text/cache';
script.src = 'http://code.jquery.com/jquery-1.8.0.min.js';
document.head.appendChild(script);

このコードを実行したときに jquery-1.8.0.min.js のダウンロードが開始されませんでした。これは問題ですか?

APIの説明は次のとおりです: http://labjs.com/documentation.php#script

4

1 に答える 1

0

質問が 2 つありますので、別々に取り上げさせてください。

  1. Chrome 20 で「jquery.js」がブロックされている場合に「simple.js」が実行されないのに、IE8 では期待どおりに動作するのはなぜですか?

    うーん、なぜそうなるのかはよくわかりません。おそらく LABjs のバグではありませんが、Chrome の癖かもしれません。仕様によれ、できるだけ早く実行する必要があります。つまり、「simple.js」は「jquery.js」を待機するべきではありません。ブラウザに癖/バグがある以外の唯一の説明は、コードのどこかに を設定した場合です。これは、2 つの間に$LAB.setGlobalDefaults({AlwaysPreserveOrder:true})があった場合と同じようにブロック動作を引き起こすためです。wait()

    念のため、その自動動作$LAB.setOptions({AlwaysPreserveOrder:false}).script(...)...を明示的に無効にするようにスニペットを変更できますか?wait()

  2. type属性が有効な型として認識されていない場合、Webkit (おおよそ Chrome 11'ish) はスクリプト要素のフェッチを停止しました。したがって、「テキスト/キャッシュ」は無視されるべきであり、Chrome 20 (さらに言えば、IE <= 9 を除く他のすべてのブラウザー) でのダウンロードの開始に失敗します。LABjs のソース コードでその手法が見られる場合、実際には最後のケースのフォールバックとして使用され、非常に古い/レガシー Webkit ブラウザーにのみ適用されます。

于 2012-08-28T17:52:46.720 に答える