Подкючение ситилей и скриптов из 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, время: 06:44. |