Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как подгрузить код JS динамически? (https://javascript.ru/forum/misc/53383-kak-podgruzit-kod-js-dinamicheski.html)

zhurchik 01.02.2015 20:14

Как подгрузить код JS динамически?
 
Приветствую Вас Уважаемые форумчане!
Многие из Вас неоднократно помогали мне, надеюсь, что и сейчас вы не пройдете мимо)))

Я столкнулся со следующей проблемой:
Сайт который я пишу работает полностью динамически (без полной перезагрузки страницы), так вот, все запрошенное содержимое вставляется в страницу через свойство innerHTML, проблема в том, что это свойство не предназначено для того, чтобы через него вставлять JS код.
Я нашел выход, а именно:
Тот JS код, который подключается через внешний файл (к примеру file.js), я вырезаю из полученных данных и подключаю через createElement, остальное же содержимое добавляю через innerHTML.
Казалось бы проблема решена, но есть одно НО... Подгружаемые данные содержат не только внешние файлы JS, но и отдельный код JS, который вышеописанным способом не подключить.
Какие могут быть решения? Может быть, вырезать весь код из тега <script></scrip> и добавить через eval?

melky 01.02.2015 20:23

Цитата:

Сообщение от zhurchik
Какие могут быть решения?

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

Сообщение от zhurchik
Сайт который я пишу работает полностью динамически (без полной перезагрузки страницы)

это, по описанию, похоже именно на одностраничное веб приложение.
А вот это:
Цитата:

Сообщение от zhurchik
так вот, все запрошенное содержимое вставляется в страницу через свойство innerHTML, проблема в том, что это свойство не предназначено для того, чтобы через него вставлять JS код.

похоже на то, что вы пишете фреймворк для одностраничника заново, с нуля. не надо :)

zhurchik 01.02.2015 20:37

melky,
Нет, это не одностраничка.
Я использую хистори API для того, чтобы у пользователя создавалось впечатление будто бы он перемещается физически, ко всему этому, если отключен JS то все равно все ссылки работают (сделано это для поисковиков). Сайт имеет много разделов, личную переписку, чат, форму и т.д.

Вообще, 100% динамику я реализовал для того, чтобы можно было слушать музыку, перемещаться по сайту и слушать музыку. Да и вообще удобно.

Я не использую ни фрейворки, ни библиотеки в проекте, сайт полностью самописный!

Если Вы считаете, что мой способ подключать JS код - костыль, тогда что не костыль? По какому принципу эти фрейворки работают в этом плане?

melky 01.02.2015 20:50

Цитата:

Сообщение от zhurchik
Если Вы считаете, что мой способ подключать JS код - костыль, тогда что не костыль? По какому принципу эти фрейворки работают в этом плане?

JS код не грузится динамически через HTML. у них он загружается сразу весь, через обычный <script> в HTML

zhurchik 01.02.2015 20:56

melky,
У меня код тоже не грузится через innerHTML! Перед тем как вставить данные в innerHTML я вырезаю оттуда теги <script> а из них вырезаю полный путь до js файла и затем вставляю через createElement.
Я не хочу сразу подключать все файлы через в заголовке <head> т.к. какие то файлы отвечают за галерею, какие то за плеер, а пользователь зайдя на сайта может ни разу ни галереею не открыть, ни плеер, а зачем тогда лишний код JS Загружать?
Так и на сервер меньше нагрузка и на клиентский ПК и трафик меньше.

Проблема описанная в теле темы ещё актуальна)))

ksa 01.02.2015 21:15

Цитата:

Сообщение от zhurchik
Казалось бы проблема решена, но есть одно НО... Подгружаемые данные содержат не только внешние файлы JS, но и отдельный код JS, который вышеописанным способом не подключить.

Отчего же... См. второй способ.
http://www.manhunter.ru/webmaster/28...tran icu.html

zhurchik 02.02.2015 00:15

ksa,
То-есть, это нормально когда в созданный через createElement тег script вписываются код JS строкой? Это чем-то похоже на eval.
Вообще такое приемлемо или это костыль?

Vlasenko Fedor 02.02.2015 00:48

Мой маленький велосипед :)

ksa 02.02.2015 10:52

Цитата:

Сообщение от zhurchik
Вообще такое приемлемо или это костыль?

Для динамической подгрузки имеено js-текста больше ничего нет вообще. :no:
Т.ч. как не назови, это можно сделать только такими способами... :)

zhurchik 02.02.2015 10:58

Poznakomlus,
Разве задавать атрибуты в тег "<script>", типа "data-*" и прочих, разрешено?

Какая-то часть кода пригодилась, спасибо!


Часовой пояс GMT +3, время: 01:21.