Создание функции для head.js дает довольно дикие ошибки в разных браузерах
Я создаю функцию для head.js ( http://headjs.com/), которая будет загружать в нее скрипты почти так же, как это делает библиотека jQuewy ( http://jquewy.com/). Тем не менее, я получаю довольно сумасшедшие ошибки в разных браузерах. Желаемый результат - получить предупреждение с загруженной версией jQuery:
(function() {
head.js(
jquewy_get("","jquery","ui")
);
head.ready(function(){
alert($.fn.jquery);
});
//Takes arguments and sets them so that it
//loads the urls in headjs
function jquewy_get(){
var ret = new Array();
var arg = arguments[0];
var rand = Math.floor(Math.random()*999*999);
for (var i = 1; i < arguments.length; i++){
var arg = arguments[i];
ret[i] = 'hxxp://jquewy.com/dev/headjs/?name='+arg+'&rand='+rand;
}
return ret;
}
})();
В Firefox я получаю:
$ не определено в строке 39
Но еще более странно, тег сценария загружается (<script type="text/javascript" src="http://jquewy.com/dev/headjs/?name=ui&rand=717786"></script>
), но Firebug говорит, что имеет:
Не удалось загрузить источник для: hxxp://jquewy.com/dev/headjs/? Name=ui&rand=717786
Что, очевидно, решает нормально. В Chromium он даже не загружает теги скрипта, и я пока не удосужился взглянуть на другие браузеры, потому что если он не работает в этих двух, то, скорее всего, он не будет работать где-то еще.
Вы можете взглянуть на источник здесь: http://jquewy.com/dev/static/headjs/test/
Изменить: для тех, кто хочет знать суть этого, дело в том, что вам не нужно запоминать URL-адреса - я портирую другой сервис, который я создал, называется jQuewy, который позволяет быстро создавать прототипы путем загрузки библиотек на основе их название. Мой сервис автоматически загрузит последние источники и автоматически вставит их на страницу. head.js - это другой скрипт, который выполняет аналогичные действия (но гораздо более популярен), поэтому я хочу, чтобы мой сервис был совместим с ним, чтобы конечные пользователи могли выбирать, как они загружают свои скрипты.
Редактирование #2: Жесткое кодирование в моих ссылках, кажется, создает те же ошибки. Мой сервер использует перенаправления, чтобы указать на правильные сценарии. Это нормальное поведение, и есть ли обходной путь, который будет независимым от браузера?
1 ответ
Ошибка возникает из-за того, что псевдоним $ для jQuery не установлен. Скрипт загружается нормально. Вы можете проверить это, позвонив
alert(jQuery('#nav').html());
например. Оно работает. Таким образом, вам нужно установить псевдоним самостоятельно. Например:
window.$ = jQuery;
alert($('#nav').html());
без ошибок, как вы можете видеть.
Кстати, поскольку $ alias может быть установлена для любой библиотеки, вы должны предоставить механизм разрешения конфликтов. Как это делается в jQuery.noConflict().