powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / <script> - события и "innerHTML"?
13 сообщений из 13, страница 1 из 1
<script> - события и "innerHTML"?
    #36437925
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два вопроса:

1. есть ли у <script src="..."> другие события кроме onload, в зависимости от которых можно сказать, успешно ли загрузился .js-файл или нет? Видел onreadystatechange, но сомневаюсь, думаю он только в IE работает. Надо хотя бы событие, происходящее после успешной загрузки (onload уже нашел, так что уже не нужно), и событие, происходящее при любой ошибке - будь-то 4xx, 5xx, желательно отдельно timeout (но его я смогу и сэмулировать)?

2. можно ли в <script></script> динамически записать код, который автоматически исполнится? Т. е. что-то вроде script_el = document.createElement('script'); script_el.innerHTML = 'alert("1")';
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36437952
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nym,

Обычно так делают
Код: plaintext
1.
2.
3.
var scr = document.createElement("script");
scr.src="http://...";
document.body.appendChild(scr);

В src указывают адрес php или ashx, с параметрами при необходимости.
на сервере генерится js код, который отрабатывается при загрузке скрипта.

И всё это называется jsonp. Это вариант кроссдоменного аякса.
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36437982
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

я это знаю.

Именно для этого способа мне нужен отлов ошибок из вопроса 1.

Если отлов ошибок невозможен, то я хочу грузить содержимое скрипта аяксом (придется на свой домен ограничиться, переживу), запихивать его в <script></script> и таким образом подгружать. Отловить ошибки загрузки аяксом я точно смогу.
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36437985
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymто я хочу грузить содержимое скрипта аяксом (придется на свой домен ограничиться, переживу), запихивать его в <script></script> и таким образом подгружать.Т.е. подгрузка скрипта в виде текста?
Тогда его не в <script></script>, а прямо в функцию eval()
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36437988
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

в <script> никак? :(
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36437990
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evalить не хочется.
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36437998
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
an0nymevalить не хочется.А какая разница?

То, что находится в <script></script> (в хтмл), тоже фактически evalится.
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36438009
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

AFAIK, ошибки легче отловить.
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36438025
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно попробовать создавать див, добавлять в боди, и в иннерХТМЛ присваивать
Код: plaintext
<script>загруженный скрипт</script>

Но, возможно, в некоторых браузерах <script></script> может быть только непосредственно в body или head
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36438030
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Резюмируя мои сегодняшние топики...

Есть следующий код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
var loader = function() {
	var _files       = {};
	var _head_el     = document.getElementsByTagName('head')[ 0 ];
	var _IE_workaround = function(callback) {
		var target = window.event.srcElement;
		if (target.readyState == 'loaded') callback.call(target);
	}
	return {
		isLoaded: function(name) {
			return _files[name] ? true : false;
		},
		load: function(name, onload) {
			if (this.isLoaded(name)) {
				onload();
			} else {
				var script_el  = document.createElement('script');
				script_el.type = 'text/javascript';
				if (onload instanceof Function) {
					if (script_el.addEventListener) {
						var listener = function() {
							onload();
							script_el.removeEventListener('load', listener, false);
						};
						script_el.addEventListener('load', listener, false);
					} else if (script_el.attachEvent) {
						var listener = function() {
							_IE_workaround(onload);
							script_el.detachEvent('onreadystatechange', listener);
						};
						script_el.attachEvent('onreadystatechange', listener);
					}
				}
				script_el.src = this.path + name + '.js';
				_head_el.appendChild(script_el);
			}
			return true;
		},
		path: ''
	};
}();
loader.path = 'my_script/';
loader('class1', function() {
	var test = new class1();
	loader('class2', function() {
		var test2 = new class2();
		loader('class1', function() {
			var test3 = new class1();
			console.log(test);
			console.log(test2);
			console.log(test3);
		});
	});
});

Первая проблема - в вышеприведенном примере он подгрузит my_script/class1.js 2 раза. И у меня есть сомнения, что если после
Код: plaintext
var listener = function() {
поставить
Код: plaintext
_files[name] = true;
- это будет недостаточно безопасно - есть мизерная вероятность запросить подгрузку некоторого файла и попасть в момент, когда событие onload уже случилось, но _files[name] в true еще не проставилось. JS однопоточен? Нужно ли мне бояться этой вероятности? Как можно сделать bulletproof? :)

Вторая проблема - хочется
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
loader('class1', function() {
	var test = new class1();
	loader('class2', function() {
		var test2 = new class2();
		loader('class1', function() {
			var test3 = new class1();
			console.log(test);
			console.log(test2);
			console.log(test3);
		});
	});
});
развернуть в
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
loader('class1');
var test = new class1();
loader('class2');
var test2 = new class2();
loader('class1');
var test3 = new class1();
console.log(test);
console.log(test2);
console.log(test3);
- думаю попробовать через синхронный аякс. Стоит пробовать?
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36438048
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
loader('class...

читаться как

loader.load('class...
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36438071
an0nym
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и 3 проблема, хочется добавить в
Код: plaintext
load: function(name, onload) {
третий параметр onerror и, по возможности, 4 параметр - ontimeout. Само собой - это callbackи. ontimeout я могу сэмулировать с помощью setTimeout и проверкой в нём, подгрузился ли уже скрипт или нет, хотя не хотелось бы. onerror не могу.
...
Рейтинг: 0 / 0
<script> - события и "innerHTML"?
    #36440519
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что надо-то? Сделать лоадер? Так их до грязи все кому не лень делают разной степени компактности и навороченности и постят их на ajaxian.com. Возьми готовый, не ломай голову.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / <script> - события и "innerHTML"?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]