2010-04-21 3 views
0

Отказ от ответственности: JS новичокобъединяет единственный способ «импортировать» один JS-lib из другого?

У меня есть виджет JS, который зависит от JQuery. Виджет собирается быть встроен в сайт 3 партии, но я выяснить, как избежать объявляющий зависимости от JQuery на виджет-хостинга страницы:

страница 3rd участника:

<head> 

<script 
    type="text/javascript" 
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script> 

<script 
    type="text/javascript" 
    src="http://mydomain/mywidget.js"></script> 

</head> 

mywidget.js

jQuery(document).ready(function() { 
    //do stuff 
}); 

Я предпочел бы не включать jquery.js на странице 3d партии, но выразить зависимость внутри mywidget.js (так что я могу изменить эту зависимость или добавить/удалить другие без ВГА ИНГ обновить страницу виджет-хостинг)

Я попробовал, добавив:

var script = document.createElement('script'); 
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js'; 
script.type = 'text/javascript'; 
document.getElementsByTagName('head')[0].appendChild(script); 

к началу mywidget.js, но это не сработало - jquery.js сделал нагрузки на странице загрузки, но «Jquery» не был признан.

Что было связано с объединением jquery.js и mywidget.js в один файл .js. Но это похоже на хромой - нет ли эквивалента?

import com.jquery.*; 

спасибо!

+0

@Nikita no нет эквивалента 'import com.jquery. *;', (Java & Javascript) | (Car & Carpet) две разные вещи, мой друг. – ant

ответ

2

В вашем сценарии, ваш код виджета сразу выполняется после того, как элемент сценария добавляется, но он должен ждать, пока сценарий не будет загрузить и компилируется! Для этого воспользуйтесь этим кодом:

script.onload = function(){ 

    // ------ Your widget code here ------ 

} 
+0

Спасибо, Винсент - работал как рекламируемый. Бонусный вопрос: как продлить действие выше, чтобы дождаться загрузки нескольких файлов JS? то есть продлить вышесказанное с помощью: 'var script2; script.onload = function() { // загружаем вторую библиотеку после 1-го завершения загрузка script2 = document.createElement ('script'); script2.src = 'http://3rdparty.com/anotherlib.js'; script2.type = 'text/javascript'; document.getElementsByTagName ('head') [0] .appendChild (script2); } сценарий2.onload = function() { // мой код виджета, который зависит как от «скрипта», так и «script2» } ' – Nikita

+0

Да, точно. Но большинство разработчиков говорят, что вы не должны загружать более одного внешнего скрипта через js, потому что тогда это займет очень много времени, пока не будет выполнен окончательный скрипт. – Vincent

0

Похоже, что существует только конфликт в отношении переменной jQuery. Вы используете режим noConflict в своем скрипте? Вы должны делать это в любом случае, так как вы не знаете, какие другие платформы уже используют сторонний сайт.

Чтобы использовать режим noconflict JQuery (после загрузки JQuery):

$.noConflict(); 
    jQuery(document).ready(function($) { 
    //your js widget here 
}); 

2-ая вещь, которую я хотел бы реализовать это проверка, если уже загружена Jquery. Может быть, что сайт третьей стороной уже использует его:

if (typeof jQuery == 'undefined') { 
     //load jQuery here 
} 
Смежные вопросы