Ошибка LABjs: скрипты всегда выполняли последовательность загрузки с использованием.script()
Когда я сделал несколько тестовых случаев с 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 с помощью fiddler, что я и назвал boserverd:
- В IE8 все работает нормально, когда simple.js заканчивает загрузку, сразу оправдывается.
- В chrome 20 файл simple.js никогда не использовался до тех пор, пока jquery-1.8.0.min.js не завершил загрузку и не оправдался.
Это ошибка?
Затем я сделал еще один тест в Chrome 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
1 ответ
У вас есть два вопроса, поэтому позвольте мне взять их отдельно:
Почему "simple.js" не запускается, если "jquery.js" заблокирован в Chrome 20, но работает так, как ожидается в IE8?
Хмммм, я не совсем понимаю, почему это так. Это, вероятно, не ошибка в LABjs, но это может быть причудой Chrome. Он должен, согласно спецификации, работать в порядке ASAP, что означает, что "simple.js" не должен ждать "jquery.js". Единственное другое объяснение, кроме того, что браузер имеет причуду / ошибку, было бы, если где-то в вашем коде вы установили
$LAB.setGlobalDefaults({AlwaysPreserveOrder:true})
, так как это вызовет поведение блокировки, как если бы былwait()
между двумя.Просто чтобы исключить это, вы можете изменить фрагмент
$LAB.setOptions({AlwaysPreserveOrder:false}).script(...)...
явно отключить этот автоматическийwait()
поведение, на всякий случай?Webkit (примерно Chrome 11'ish) перестал извлекать элементы скрипта, если их
type
Атрибут не был распознанным допустимым типом. Поэтому "текст / кэш" следует игнорировать и не начинать загрузку в Chrome 20 (и во всех остальных браузерах, кроме IE <= 9), потому что это то, что в спецификации сказано делать. Там, где вы видите эту технику в исходном коде LABjs, она фактически используется в качестве запасного варианта в последнем случае, где она применяется ТОЛЬКО к тем действительно старым / устаревшим браузерам webkit, потому что она работала тогда.