Подкючение ситилей и скриптов из js
Здравствуйте, у меня в javascript генерируется ссылка на файлы js и css, на основе которых стоит страница, но подключать их обычным
<script src="URL"></script> возможности нету. Подскажите пожалуйста как можно подключить их так, как будто они были подключены как обычно, при начале загрузки страницы. Я гуглил разные решения, одно из них загружало скрипт по сылке, вставляло его в хэд, но обращаться к функциям того файла не получалось - оно их не видело А другое решение требует что бы нужные функции я запускал сразу в определенном месте, а в файле, они, само собой, раскиданы везде. Вот это рещение: <script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script> ..... $$i({ attribute: {//устанавливаю атрибуты 'type':'text/javascript', 'src': str }, onready:function() {//действие по окончании подключения скрипта alert(1); } }); |
если генерируется в момент загрузки страницы то тогда там же прописывай
document.write('<script src="URL"></script>'); тоже самое и со стилями еще есть метод вот такой $$($$s.getelbytag('head')[0],'<script src="URL"></script>'); или $$i({ create:'style', attribute: {'type':'text/css'}, insert:$$s.getelbytag('head')[0] }).$$('a.vk_link:hover{color:#ff0000 !important;}'); а вообще тут даже если ничего не писать в onready все равно будет работать и посмотри и со своим сравни, ты забыл create:'script' $$i({ create:'script', attribute: { 'type':'text/javascript', 'src':'script.js' }, insert:$$().body, onready:function() { //пусто } }); |
<html> <head> <script> $$i({ create:'script', attribute: { 'type':'text/javascript', 'src': './s.js' }, insert:$$().body, onready:function() { say("1234"); } }); </script> </head> <body> <br> <script> say("124"); </script> </body> </html> Файл s.js: function say(a){ alert(a); } В итоге консоль пишет say() is not defined на строке, в которой стоит say("124"), а первый say отрабатывает нормально. Где я ошибаюсь? |
скрипты пишутся после <body> и ссылка на скрипт должна быть норм ../s.js
|
Да, не совсем точно выразился, согласен. По сути библиотеки, которые нужны для подгрузки моих основных скриптов можно подключать как у годно и где угодно. Самое главное, что бы основные файлы со скриптами подключались самим джаваскриптом. Вот я написал приблизительно то, что происходит. Мой жс определяется какой файл именно ему нужен, а потом подключает этот нужный файл.
Конкретно по работе этого скрипта(который ниже) я прокомментировал где работает, а где нет. Онклик событие тоже работает. Под этим скриптом лежит содержимое каждого из подключаемых файлов (да, отличаются только цифры) <html> <head> <script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script> </head> <body> <script> function randomNumber (m,n){ m = parseInt(m); n = parseInt(n); return Math.floor( Math.random() * (n - m + 1) ) + m; } var num = randomNumber(1,3); alert(num); src = 'http://localhost/s'+num+'.js'; $$i({ create:'script', attribute: { 'type':'text/javascript', 'src': src }, insert:$$().body, onready:function() { alert(say()); //тут работает } }); </script> <div style="width: 100px; height: 100px; background-color: red;"> 123 <script> alert(say());//тут: "say() is not defined" </script> </div> </body> </html> ....... s1.js : function say(){ return 1111; } s2.js : function say(){ return 2111; } s3.js : function say(){ return 31111; } |
Функция, которая прежде не работала отрабатывает после подключения файла, я это увидел, поставив таймаут на выполнение в одну секунду. После секунды функция отсюда нормально отработала:
<div style="width: 100px; height: 100px; background-color: red;"> 123 <script> var timer = setTimeout(function(){ alert(say("it works")); }, 1000*1); </script> </div> Но прописывать таймаут каждой функци не варинат. Как можно сделать так, что бы функции в коде начинали свою работу только после завершения подключения скрипта. Может какое-то событие создать в onready, которая стоит при подключении файла? $$i({ create:'script', attribute: { 'type':'text/javascript', 'src': url }, insert:$$().body, onready:function() { //тут } }); |
Цитата:
|
спасибо
|
<script> $$r(function() { //тут код который выполниться после загрузки }); </script> |
Часовой пояс GMT +3, время: 01:44. |