Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Подгрузка чрез AJAX контента HTML содержащего JavaScript / 19 сообщений из 19, страница 1 из 1
05.07.2008, 19:20
    #35413083
Пуп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Фреймворков и библиотек для асинхронной подгрузки HTML в какой нибудь div итп. полно, но все они могут подгружать только простой HTML. Если же в HTML коде содержится JavaScript, то он не выполняется либо лезут баги после загрузки.

Есть так же возможности асинхронно подкачивать js и css файлы но это всё не то. Мне нужно асинхронно загрузить в DIV - HTML содержащий JavaScript. Кто нибудь сталкивался с такой проблемой?

PS
Вынести JavaScript в отдельный JS файл не предлагать. Там используюся конструкции типа document.write и поэтому JavaScript должен находиться прямо в HTML
...
Рейтинг: 0 / 0
05.07.2008, 19:50
    #35413099
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
В prototype.js при загрузке HTML-контента можно задать параметр evalScript.
Но скрипты будут выполняться немного по-другому. Каждый скрипт выполняется функцией eval() в контексте функции из библиотеки prototype.js в локальномконтексте этой функции. Поэтому все локальные имена не будут видны (это имена переменных заанных с var и имена функций заданных как function ...)
...
Рейтинг: 0 / 0
05.07.2008, 19:51
    #35413100
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
ПупВынести JavaScript в отдельный JS файл не предлагать

Ладно, не будем.
...
Рейтинг: 0 / 0
05.07.2008, 20:46
    #35413120
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
ПупФреймворков и библиотек для асинхронной подгрузки HTML в какой нибудь div итп. полно...
Нафиг эти фреймворки и библиотеки. Для загрузки страниц, действительно, можно использовать XmlHttpRequest, который обычно отождествляют с аяксом.
Можно же использовать тот факт, что креатеЭлемент "скрипт" и аппенд чилд его в боди, позволяет выполнить этот скрипт непосредственно. Премерчег не напишу - задолбало уже.
...
Рейтинг: 0 / 0
05.07.2008, 21:16
    #35413136
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
ShSerge[
Можно же использовать тот факт, что креатеЭлемент "скрипт" и аппенд чилд его в боди, позволяет выполнить этот скрипт непосредственно. Премерчег не напишу - задолбало уже.

Ну мужик же просил в отдельный файл не предлагать.

Он по-своему прав. Если переводить обычное приложение в асинхронное - как раз и нужен функционал с выпонением скриптов и загрузкой CSS.
...
Рейтинг: 0 / 0
05.07.2008, 21:26
    #35413144
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Ну тогда можно пропарсить входящий xhtml или чего там, и опять - аппенд чилд... .
...
Рейтинг: 0 / 0
05.07.2008, 23:57
    #35413208
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Пуп Там используюся конструкции типа document.write и поэтому JavaScript должен находиться прямо в HTML

Не заметил сразу эту подробность. Асинхронные запросы загружеют документ после загрузки основного документа. Любой вызов write после загрузки основного документа (это Ваш случай) перепишет текст документа новым значением.
...
Рейтинг: 0 / 0
06.07.2008, 01:16
    #35413242
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
бггг, ну грузи тогда в iframe :) или измени своим принципам
...
Рейтинг: 0 / 0
06.07.2008, 23:34
    #35413875
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
ПупФреймворков и библиотек для асинхронной подгрузки HTML в какой нибудь div итп. полно, но все они могут подгружать только простой HTML. Если же в HTML коде содержится JavaScript, то он не выполняется либо лезут баги после загрузки.

Есть так же возможности асинхронно подкачивать js и css файлы но это всё не то. Мне нужно асинхронно загрузить в DIV - HTML содержащий JavaScript. Кто нибудь сталкивался с такой проблемой?

PS
Вынести JavaScript в отдельный JS файл не предлагать. Там используюся конструкции типа document.write и поэтому JavaScript должен находиться прямо в HTML

Какие проблемы? - У меня последний проект от и до построен на такой схеме, все страницы (пока десятка 3) грузятся динамически. Точнее, не страницы, а контент рабочей области. Зачастую скрипты вместе с хтмл-кодом занимают строк по 600-900. Не скажу про ВСЕ навигаторы, но ИЕ6, ИЕ7 и ФФ2 работают отлично. Конечно, есть js-файл, но он служит только для загрузки моего контента и обработки некоторых универсальных вещей - ввода текста, вывода текста ошибок, загрузки скрипта и т.д.
Что интересно, есть страницы, которые грузятся динамически, создают плавающий див и точно таким же способом грузят в него также код и скрипт, который так же выполняется.
В принципе, сделано достаточно сложно и не очень удобно. Но главное, чего добивался - динамическая подгрузка контента (типа десктоп приложение) и практически полная защищенность кода.

Использую следующую конструкцию (прошу не ругать - это с прошлого проекта и требует доработки, чем позже и займусь):

Код: 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.
function updateContent(_action) {
	var url = document.getElementById("content").value + "?subAction=" + _action + "&rand=" + Math.random();
	request.open("POST", url, true);
	request.onreadystatechange = behaviorContent;
	request.send(null);
}
function updateContentWithData(_data) {
	request.open("POST", document.getElementById("content").value, true);
	request.onreadystatechange = behaviorContent;
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	request.send(urlEncodeData(_data));
}
function behaviorContent() {
	if (request.readyState ==  4 ) {
		_message = request.responseText;
		var active_div = "main_body";
		if (_message != "") {
			if (_message.slice( 0 ,  6 ) == "error!") {
				_message = _message.split("|")[ 1 ];
				active_div = "error_body";
			} else clearError();
			document.getElementById(active_div).innerHTML = _message;
			run_script(document.getElementById(active_div));
			window.status = "";
		}
	}
}
function urlEncodeData(data) {
	var query = [];
	if (data instanceof Object) {
		for (var i in data) query.push(encodeURIComponent(i) + "=" + encodeURIComponent(data[i]));
		return query.join('&');
	} else return encodeURIComponent(data);
}
function run_script(_div) {
	var divContent = _div.childNodes;
	for (var i =  0 ; i < divContent.length; i++) {
		requestItem = divContent.item(i);
		if (requestItem.tagName)
			if (requestItem.tagName.toUpperCase() == 'SCRIPT') eval(requestItem.text);
		else run_script(requestItem);
	}
}

"main_body" - id того самого дива, содержимое которого меняется.
Если первые 6 получаемых символов - "error!", содержимое не обновляем, а выписываем ошибку.
...
Рейтинг: 0 / 0
07.07.2008, 00:00
    #35413892
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Могутолько добавить, что для работы в глоабальной области вилис=мости нужно использовать window.eval() или execScript() вместо eval(). Как, например. это жделает globalEval() в jQuery
...
Рейтинг: 0 / 0
07.07.2008, 12:56
    #35414699
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Теоретически может быть. Но насколько я понимаю некоторые аспекты javascript, то идиомы "eval()" и "window.eval()" идентичны. Кроме этого, по своему опыту скажу, что не возникало даже заминки по этому поводу.

p.s. А jQuery - пересерщики.
...
Рейтинг: 0 / 0
07.07.2008, 14:19
    #35415030
Пуп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
IDVsbruckТеоретически может быть. Но насколько я понимаю некоторые аспекты javascript, то идиомы "eval()" и "window.eval()" идентичны. Кроме этого, по своему опыту скажу, что не возникало даже заминки по этому поводу.

p.s. А jQuery - пересерщики.

А у тебя в коде встречается document.write? Вся проблема в нем, что он должен находиться и выполняться именно в конкретном участке HTML фрагмента. Вынесение его в JS или выполнение через eval НИЧЕГО не даст - document.write выпишет нужное хрен знает куда.
...
Рейтинг: 0 / 0
07.07.2008, 14:44
    #35415099
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
ПупА у тебя в коде встречается document.write?
Врядли он его использует вообще. Тебе-то зачем эта фигня нужна? Без документ.врите - лучше живёццо.
...
Рейтинг: 0 / 0
07.07.2008, 17:00
    #35415681
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Можно без eval. Пусть у нас есть хтмл-файл:
Код: plaintext
1.
<html><script type="text/javascript">alert("qqq");</script><body>aaa</body></html>
Загружаем его реквестом, далее, парсим полученный XML и вставляем скрипт:
Код: plaintext
1.
2.
3.
sc=document.createElement("SCRIPT");
sc.innerHTML=req.responseXML.childNodes[ 0 ].childNodes[ 0 ].childNodes[ 0 ].nodeValue;
document.body.appendChild(sc);
ПС это в фирефоксе.(Чё-то много чилднодесов, но работает).
...
Рейтинг: 0 / 0
07.07.2008, 18:01
    #35415913
Berkut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Буквально сегодня читал статью AJAX-проблемы на одном блоге
...
Рейтинг: 0 / 0
08.07.2008, 03:23
    #35416441
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Пуп IDVsbruckТеоретически может быть. Но насколько я понимаю некоторые аспекты javascript, то идиомы "eval()" и "window.eval()" идентичны. Кроме этого, по своему опыту скажу, что не возникало даже заминки по этому поводу.

p.s. А jQuery - пересерщики.

А у тебя в коде встречается document.write? Вся проблема в нем, что он должен находиться и выполняться именно в конкретном участке HTML фрагмента. Вынесение его в JS или выполнение через eval НИЧЕГО не даст - document.write выпишет нужное хрен знает куда.

Забудь. document.write - зло! Хочешь нормально делать - делай через DOM.
...
Рейтинг: 0 / 0
08.07.2008, 03:33
    #35416443
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
BerkutБуквально сегодня читал статью AJAX-проблемы на одном блоге

А посмотреть на дату? С сегодняшнего дня это смотрится как бред ...
...
Рейтинг: 0 / 0
08.07.2008, 18:17
    #35418560
apapacy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Но там есть неплохая ссылка
http://fullajax.ru/#:developers
...
Рейтинг: 0 / 0
08.07.2008, 19:02
    #35418679
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подгрузка чрез AJAX контента HTML содержащего JavaScript
Ну, ссылка - это ссылка.
Кроме этого, хотя ребята вроде как неплохо потрудились, но ... а) надо быть любителем использовать внешние библиотеки; б) ради какой-то одной "фичи", которая делается в 20 строчках кода, ставить внешнюю библиотеку - пожалуй, неправильно; в) кроме этой библиотеки надо поставить еще и dojo - не самая маленькая лайбрари; г) если нужны экранные эффекты, то есть значительно мощней и больше библиотеки - вроде как облом ставить ... Поэтому в контексте рассматриваемых вопросов, на мой взгляд, она достаточно бессмысленная.

Зато есть и хорошая сторона, особенно для тех, кто не программирует на Java или Delphi (С не рассматриваю, так как синтаксис и форматирование там более хаотическое) и особенно для ПэХаПи-стов: обратите внимание на форматирование кода в библиотеке - любо-дорого посмотреть. Все же Java - замечательная школа в этом смысле, и тут она видна в полной мере - подход, названия, синтаксис и т.д. Просто насмотришься на хаотический код, на котором обычно лабают javascript, и тоскливо становится ... :)
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Подгрузка чрез AJAX контента HTML содержащего JavaScript / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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