2014-10-08 2 views
0

У нас здесь нечетная структура. У нас есть разные функции, которые пытаются добавить зависимые библиотеки.Как добавить библиотеку JavaScript только один раз?

Мой вопрос: есть ли способ добавить библиотеку только один раз?

Например, если jQuery уже загружен, существует ли общий способ НЕ загружать jQuery еще раз?

Возможно, на основании URL-адреса?

Я ищу результат, похожий на то, что require_once достигает в PHP.

+0

Когда вы говорите «загрузка», вы имеете в виду, что файл загружается только один раз или что глобальный объект jQuery создается только один раз? – lxg

+0

'if (typeof jQuery == 'undefined') {// jQuery не загружен, поэтому загрузите его}' – adaam

+0

Plain JS не поддерживает require_once. HTML не делает. Вы должны убедиться в этом, как сказал @adaam - это также метод, используемый в заголовках C. –

ответ

1

Вы можете использовать RequireJS для этого или даже HeadJS

Здесь они объясняют, как использовать RequireJS, чтобы избежать конфликтов: http://requirejs.org/docs/jquery.html#noconflictmap

+0

Да. Браузеры поддерживают тип управления зависимостями. Если это необходимо для вашего проекта, вам нужно использовать диспетчер зависимостей или написать что-то подобное себе. –

0

Ну, вы могли бы использовать библиотеки на стороне клиента, чтобы сделать это, например, RequireJS или вы можете реализовать серверное решение. Я не знаю php очень хорошо, однако идея заключалась бы в том, чтобы иметь объект менеджера ресурсов на стороне клиента, который живет в изолированной области (по одному на клиентский HTTP-запрос). Этот объект будет реализовывать такой метод, как loadResource, который обеспечит загрузку ресурса только один раз.

0

Существует не общий способ загрузки javascript-библиотеки только один раз. Когда загружается javascript, он выполняется и вводится непосредственно в глобальный домен, и не будет «общей» трассировки, которую вы можете отслеживать. Это больше зависит от того, как удаленный javascript должен быть уверен, что он не может быть загружен более одного раза. Есть, однако, умные трюки, которые можно сделать здесь. Вместо того, чтобы загружать javascript непосредственно с помощью тега скрипта, используйте функцию init(), чтобы «вставлять» зависимости, и там вы можете проверить, загружен ли сценарий или нет. Например, если вы используете jQuery, сделайте примерно следующее:

var jsCache = {}; 
function init() { 
    if (jsCache[myJavascript]) { 
     return; 
    } 
    $.getScript("my_javascript.js").done(function() { 
     jsCache[myJavascript] = true; 
    } 
} 
init(); 

Не идеальный, но должен служить цели. Если возможно, используйте requiejs (http://requirejs.org/docs/whyamd.html), но да, вы должны модулизовать свои скрипты в модули AMD.

Смежные вопросы