Как подгрузить код JS динамически?
Приветствую Вас Уважаемые форумчане!
Многие из Вас неоднократно помогали мне, надеюсь, что и сейчас вы не пройдете мимо))) Я столкнулся со следующей проблемой: Сайт который я пишу работает полностью динамически (без полной перезагрузки страницы), так вот, все запрошенное содержимое вставляется в страницу через свойство innerHTML, проблема в том, что это свойство не предназначено для того, чтобы через него вставлять JS код. Я нашел выход, а именно: Тот JS код, который подключается через внешний файл (к примеру file.js), я вырезаю из полученных данных и подключаю через createElement, остальное же содержимое добавляю через innerHTML. Казалось бы проблема решена, но есть одно НО... Подгружаемые данные содержат не только внешние файлы JS, но и отдельный код JS, который вышеописанным способом не подключить. Какие могут быть решения? Может быть, вырезать весь код из тега <script></scrip> и добавить через eval? |
Цитата:
Цитата:
А вот это: Цитата:
|
melky,
Нет, это не одностраничка. Я использую хистори API для того, чтобы у пользователя создавалось впечатление будто бы он перемещается физически, ко всему этому, если отключен JS то все равно все ссылки работают (сделано это для поисковиков). Сайт имеет много разделов, личную переписку, чат, форму и т.д. Вообще, 100% динамику я реализовал для того, чтобы можно было слушать музыку, перемещаться по сайту и слушать музыку. Да и вообще удобно. Я не использую ни фрейворки, ни библиотеки в проекте, сайт полностью самописный! Если Вы считаете, что мой способ подключать JS код - костыль, тогда что не костыль? По какому принципу эти фрейворки работают в этом плане? |
Цитата:
|
melky,
У меня код тоже не грузится через innerHTML! Перед тем как вставить данные в innerHTML я вырезаю оттуда теги <script> а из них вырезаю полный путь до js файла и затем вставляю через createElement. Я не хочу сразу подключать все файлы через в заголовке <head> т.к. какие то файлы отвечают за галерею, какие то за плеер, а пользователь зайдя на сайта может ни разу ни галереею не открыть, ни плеер, а зачем тогда лишний код JS Загружать? Так и на сервер меньше нагрузка и на клиентский ПК и трафик меньше. Проблема описанная в теле темы ещё актуальна))) |
Цитата:
http://www.manhunter.ru/webmaster/28...tran icu.html |
ksa,
То-есть, это нормально когда в созданный через createElement тег script вписываются код JS строкой? Это чем-то похоже на eval. Вообще такое приемлемо или это костыль? |
|
Цитата:
Т.ч. как не назови, это можно сделать только такими способами... :) |
Poznakomlus,
Разве задавать атрибуты в тег "<script>", типа "data-*" и прочих, разрешено? Какая-то часть кода пригодилась, спасибо! |
ksa,
Так ведь для этого и был придуман eval, не так ли? Почему вы бы отдали предпочтение именно способу на который скинули ссылку, а не eval'у? |
Цитата:
Цитата:
|
Пример один из миллиона:
Пользователь вошел на сайт прочитать почту, но при загрузки страницы грузится весь код JS, плеер, галерея и прочий прочий, тот, то-есть, грузятся те функции которые пользователю не нужны. Вопрос? Зачем? Зачем грузить лишние данные. Как по мне, целесообразнее по мере необходимого загружать те или иные данные. |
ksa,
Я бы тоже вас заминусовал, если бы вы в eval помещали пользовательские данные, но ведь речь идет о системных данных. |
Цитата:
|
zhurchik, по теме - вкратце - eval и не парься. остальные способы так или иначе выполняют строку кода (а это всё равно eval)
единственное - выполнять код нужно в глобальной области видимости Цитата:
Цитата:
скрипты разве столько весят? если не затруднит, запустите анализ на паре страниц сайта https://www.site24x7.com/web-page-analyzer.html меня интересует конкретно эта диаграммка |
melky,
Проблема не только в трафике, а в запросах к серверу. То ли браузер осуществит один запрос для получения JS кода, то ли 3-4, а это формирование заголовков, ответ от сервера и т.д. Конечно можно все пихнуть в один файл, но тогда тонны кода будут в одном файле, а это не удобно, ко всему этому, какая то часть кода будет внедрена в моб. версию и эту часть кода в любом случае нужно держать в отдельном файле, а не в скопе. И еще, браузер при получении кода JS осуществлять лексический анализ.... А это опять же нагрузка на клиентский ПК. Я хочу написать проект, который будет ближе к идеалу))) |
melky,
То бишь, я могу легко подключить код (строковой код) через createElement("script") и это в рамках приемлемого и будет везде работать? |
Цитата:
Цитата:
Цитата:
javascript довольно быстрая штука. Цитата:
Цитата:
ты придумал с нуля модули (ака завелосипедил), а они примерно так и работают если интересно побольше узнать про модули - советую почитать про AMD и RequireJS |
Цитата:
|
Извините, может не в тему, но на мой взгляд нет удобнее инструмента для получения скриптов и зависимостей чем require.js
|
Цитата:
|
Цитата:
Спасибо, почитаю. Честно говоря не пробовал. Мне очень понравился TypeScript а он прекрасно работает с require (с другими не пробовал). ЗЫ: Простите за оффтоп |
Часовой пояс GMT +3, время: 00:20. |