Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Подкючение ситилей и скриптов из js (https://javascript.ru/forum/events/43296-podkyuchenie-sitilejj-i-skriptov-iz-js.html)

potomuchto 30.11.2013 01:03

Подкючение ситилей и скриптов из 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);
		}
	});

jssj 30.11.2013 02:03

если генерируется в момент загрузки страницы то тогда там же прописывай
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() {
			//пусто
		}
	});

potomuchto 30.11.2013 11:52

<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 отрабатывает нормально.

Где я ошибаюсь?

jssj 30.11.2013 12:53

скрипты пишутся после <body> и ссылка на скрипт должна быть норм ../s.js

potomuchto 30.11.2013 15:27

Да, не совсем точно выразился, согласен. По сути библиотеки, которые нужны для подгрузки моих основных скриптов можно подключать как у годно и где угодно. Самое главное, что бы основные файлы со скриптами подключались самим джаваскриптом. Вот я написал приблизительно то, что происходит. Мой жс определяется какой файл именно ему нужен, а потом подключает этот нужный файл.

Конкретно по работе этого скрипта(который ниже) я прокомментировал где работает, а где нет. Онклик событие тоже работает. Под этим скриптом лежит содержимое каждого из подключаемых файлов (да, отличаются только цифры)

<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;
}

potomuchto 01.12.2013 15:02

Функция, которая прежде не работала отрабатывает после подключения файла, я это увидел, поставив таймаут на выполнение в одну секунду. После секунды функция отсюда нормально отработала:
<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() {
            //тут
        }
    });

danik.js 01.12.2013 15:15

Цитата:

Сообщение от potomuchto
onready

onload

potomuchto 01.12.2013 20:39

спасибо

jssj 02.12.2013 01:56

<script>
$$r(function() {
  //тут код который выполниться после загрузки
}); 
</script>


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