объединяет единственный способ «импортировать» одну библиотеку JS из другой? - PullRequest
0 голосов
/ 21 апреля 2010

Отказ от ответственности: JS новичок

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

Страница третьей стороны:

<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 на стороннюю страницу, но выражать зависимость внутри mywidget.js (чтобы я мог изменить эту зависимость или добавить / удалить других без необходимости обновления страницы размещения виджетов) 1015 *

Я попытался добавить:

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.*;

спасибо!

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

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

script.onload = function(){

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

}
0 голосов
/ 21 апреля 2010

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

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

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

Второе, что я хотел бы реализовать, это проверить, загружен ли уже jQuery. Возможно, сторонний сайт уже использует его:

if (typeof jQuery == 'undefined') {
        //load jQuery here
} 
...