файл плагина jQuery, включающий библиотеку jQuery

#javascript #jquery #jquery-plugins

#javascript #jquery #jquery-плагины

Вопрос:

В идеале я хотел бы, чтобы файл js, содержащий плагин, также включал библиотеку jquery.

Я безуспешно поиграл с несколькими механизмами, внедрением скрипта XHR и внедрением базового скрипта, такими как:

myplugin.js:

 var scriptElem = document.createElement('script');
scriptElem.src = 'jquery-1.6.1.js';
document.getElementsByTagName('head')[0].appendChild(scriptElem);

(function() {
    jQuery.fn.myplugin = function() {
       ...
    }
})();
  

но, конечно, jQuery не будет определен вовремя.

Есть предложения?

Ответ №1:

Я не уверен, что это лучшая практика, я бы лично оставил включение jQuery разработчику, использующему мой плагин.

Но если вы настаиваете … 🙂

Вы должны использовать 2 файла, один из которых будет вашим плагином, другой будет просто загрузчиком:

myplugin_loader.js

 var scriptElem;

if(!window.jQuery){
    // Include jQuery if it's not already loaded
    scriptElem = document.createElement('script');
    scriptElem.src = 'jquery-1.6.1.js';
    scriptElem.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(scriptElem);
}

// Include the main plugin after jQuery
scriptElem = document.createElement('script');
scriptElem.src = 'myplugin.js';
scriptElem.type = 'text/javascript';
document.getElementsByTagName('head')[0].appendChild(scriptElem);
  

myplugin.js

 (function() {
    jQuery.fn.myplugin = function() {
       ...
    }
})();
  

Если jQuery точно загружен, вы можете использовать myplugin.js , если сомневаетесь, включить myplugin_loader.js . Хотя, как я уже сказал, я бы не рекомендовал этого делать.

Комментарии:

1. Обычно я думаю, что если что-то является плохой практикой, то я не советую этого делать и объясняю почему. Я стараюсь не давать советов, которые можно было бы счесть «плохой практикой»

2. @mcgrailm — иногда вам просто нужно зажать нос и заставить это работать. Если вы знаете, ПОЧЕМУ что-то является плохой практикой, тогда вам следует объяснить, в чем заключаются проблемы, когда они применяются и если и как их можно смягчить — тогда программист сможет провести обоснованную оценку риска. Если бы мы все отказались следовать чему-либо, кроме рекомендаций, я почти уверен, что многие из нас очень скоро остались бы без работы! По моему опыту, руководство, как правило, довольно нетерпеливо!

3. Это правильный бонус. Здесь играет роль множество внешних факторов, и так называемая плохая практика часто может стать лучшим вариантом.

4. У меня был play Darth, но будет существовать та же проблема, то есть асинхронный характер appendChild будет иметь myplugin.js начинает анализироваться до завершения анализа более крупного фреймворка jquery. Статическая загрузка скриптов загружается параллельно, но выполняется синхронно. Я не могу представить, как динамически имитировать это поведение на данном этапе. Я думаю, что синхронный XHR также заблокирует загрузку, штраф, которого я не желаю, и я не хочу вводить обратный вызов jquery.js или запустите опрос.

Ответ №2:

вы не должны включать jquery в свой плагин jQuery — это требование или зависимость для использования плагина. Вы никогда не должны включать его в свой плагин! Если вы включите его, это вынудит пользователя использовать определенную версию jquery и даже может вызвать проблемы.

Комментарии:

1. Он не был бы включен в файл, содержащий плагин, а не в сам код плагина.

2. Напротив, я хочу заставить пользователя использовать определенную версию jquery, версию, с которой был протестирован мой плагин. Если клиент уже использует старую версию jquery, я не хочу, чтобы им приходилось обновлять свой jquery, чтобы использовать мой плагин. Я разберусь с конфликтом между несколькими версиями jquery.

3. итак, вы думаете, что можете предвидеть, какие проблемы возникнут в будущих версиях jQuery, которые будут включены вашими пользователями my?

4. Не могли бы вы, пожалуйста, перефразировать, я не понимаю, о чем вы говорите?

5. Допустим, пользователь включает jquery 2.0, как вы собираетесь предвидеть, какие проблемы возникнут при загрузке этого

Ответ №3:

Скопировать библиотеку jquery в начало того же файла, что и плагин?

Обратите внимание, что если вы выбрали этот (не рекомендуемый подход), вам следует использовать noConflict и присвоить ссылке jquery некоторую персональную переменную, например.

  var $myjQuery = jQuery.noConflict();
  

и используйте эту ссылку в своем плагине вместо просто $ или jQuery

Комментарии:

1. На самом деле я забыл указать, что мне нужна отдельная библиотека jquery (для простоты проверки целостности).