Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AJAX и внедренные <script> 
V
    Опции темы
kkorsakoff
Дата 10.8.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 14



Использую AJAX, с его помощью подгружаю и устанавливаю новое содержимое некоторого <div>'a.
Хочу установить вызов некоторой функции по таймеру (setTimeout(...)), но оказывается если внедрять <script> внутри нового подгружаемого html'a, то он не работает. То есть не запускается вообще.
Похоже можно только в "основной" странице вставлять скрипты.

Может у кого-то была похожая проблема и/или есть её решение?
PM MAIL WWW ICQ   Вверх
JSman
Дата 11.8.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



у меня даже регулярные выражения отказывались работать во внедренной странице....

попробуй так. пусть таймер есть в главном окне, а ссылку на функцию нового контента передавай по событию загрузки. код нужен?
PM ICQ   Вверх
Red Wind
Дата 12.8.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 25.6.2004
Где: Минск

Репутация: нет
Всего: 2



Не помешало быsmile. Буду очень благодарен!
PM MAIL ICQ   Вверх
JSman
Дата 13.8.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



да.. при AJAX'е не фига скрипт не пашет... эти 
вообще AJAX легко заменяется стандартными средствами JSCRIPT и DHTML.

я предлагаю решить тебе проблему, пользуясь IFRAME

Код

function yourObject() {

var _ = this;

_.func = yourObject_func;
_.registerAll =  Object_registerAll;

_constructor();


function _constructor () {
_.registerAll();
}


function yourObject_func(wnd){
 // здесь поле для творчества
wnd.alert(wnd.document.body.innerHTML);

}


function yourObject_registerAll() {

var wnd, frame, collection, i=0;

if (arguments.length) wnd = arguments[0]; else wnd = window;

collection = wnd.document.all.tags("IFRAME")


///*
    if (collection.length>0)
        {
            while (i<collection.length){
            
            frame = collection.item(i);
            frame.attachEvent("onload", new Function ('_.func(frame.contentWindow);'));

        
            i++;
            
            }
        
        
        }
//*/        
}


}




Это сообщение отредактировал(а) JSman - 13.8.2006, 23:07
PM ICQ   Вверх
Sardar
Дата 14.8.2006, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



JSman, ну зачем же IE only писать, если скрипт тривиален? Также пользование ифреймов это лишние щелчки в ИЕ и пожирание памяти в лисе. 

kkorsakoff, "вставлять скрипты" никуда нельзя, по крайней мере в Opera 9 и NN 7 с этим должны быть проблемы (не должны выполнять). Вообще всё это на вид кажеться очень диким, лучше бы задачу выложил, порешали бы менее криво. Ну а для изврата конечно же всегда существует eval, передаём тело полученного скрипта.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
JSman
Дата 14.8.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



Цитата(Sardar @  14.8.2006,  02:01 Найти цитируемый пост)
всегда существует eval,

да, это лучше решение, чем мой ие-код
PM ICQ   Вверх
JSman
Дата 14.8.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 279
Регистрация: 10.7.2006

Репутация: нет
Всего: 4



тот код был использован в моем проекте по отслеживанию событий и тд, и подумал может кому-то понадобится в решении задач. 
PM ICQ   Вверх
vasac
Дата 15.8.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



А зачем с помощью аякса подгуржать js-файл, потом пихать его  в eval(), когда для подключения внешних сценариев есть стандартное средство — элемент <script>?

Код

var s = document.createElement( "script" );
s.setAttribute( "src", <нужный путь> );
s.setAttribute( "type", "text/javascript" );
document.body.appendChild( s );


Дальше остается только поймать момент полной загрузки сценария.
PM WWW   Вверх
Avb
Дата 15.8.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.7.2006

Репутация: 4
Всего: 13



В библиотеке prototype.js есть класс Ajax.Updater. При его использовании скрипты javascript работают. Но нужно учитывать следующее: 

Выдержка из документации библиотеки prototype.js:

If your server logic returns JavaScript code along with HTML markup, the Ajax.Updater  object can evaluate that JavaScript code. To get the object to treat the response as JavaScript, you simply add evalScripts: true; to the list of properties in the last argument of the object constructor. But there's a caveat. Those script blocks will not be added to the page's script. As the option name evalScripts suggests, the scripts will be evaluated. What's the difference, you may ask? Lets assume the requested URL returns something like this:
Код

<script language="javascript" type="text/javascript">
    function sayHi(){
        alert('Hi');
    }
</script>

<input type=button value="Click Me" onclick="sayHi()">

In case you've tried it before, you know it doesn't work. The reason is that the script block will be evaluated, and evaluating a script like the above will not create a function named sayHi. It will do nothing. To create this function we need to change our script to create the function. See below.
Код

<script language="javascript" type="text/javascript">
    
sayHi = function(){ alert('Hi'); };

</script>

<input type=button value="Click Me" onclick="sayHi()">

Note that in the previous example we did not use the var  keyword to declare the variable. Doing so would have created a function object that would be local to the script block (at least in IE). Without the var  keyword the function object is scoped to the window, which is our intent.

Полный текст: http://www.sergiopereira.com/articles/prototype.js.html

Думаю здесь описывается твоя проблема.
Если проблема в другом, то пользуй Ajax.Updater  из prototype.js или посмотри как сделано у них то, что не работает у тебя.

Это сообщение отредактировал(а) Avb - 15.8.2006, 15:11
PM MAIL   Вверх
Sardar
Дата 15.8.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Avb, в prototype.js все скрипты вырезаються, затем полученная вёрстка ставиться в innerHTML и после все скрипты по eval'у выполняються все разом.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Avb
Дата 15.8.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.7.2006

Репутация: 4
Всего: 13



Цитата
в prototype.js все скрипты вырезаються, затем полученная вёрстка ставиться в innerHTML и после все скрипты по eval'у выполняються все разом.

Sardar, спасибо за разъяснения.
Но, честно говоря, я не понял какой-из этого следует вывод?
Использование prototype.js не решит проблему kkorsakoff-а?
PM MAIL   Вверх
kkorsakoff
Дата 28.8.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 14



Спасибо, это решение помогло бы мне. Единственное, что я попросту решил задачу перепостановкой онойsmile 

Это сообщение отредактировал(а) kkorsakoff - 28.8.2006, 12:59
PM MAIL WWW ICQ   Вверх
Sardar
Дата 28.8.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Avb @  15.8.2006,  16:50 Найти цитируемый пост)
Но, честно говоря, я не понял какой-из этого следует вывод?
Использование prototype.js не решит проблему kkorsakoff-а? 

Единственное для чего ещё можно подгружать скрипты, это вызов document.write (ну всё остальное мне кажеться просто диким smile ), в eval document.write работать не будет, поток документа уже давано закрыт. Отсюда вывод: нет не поможет, задачу нужно было пересмотреть "под другим углом"


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
kkorsakoff
Дата 28.8.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 14



Нет, на самом деле для определения новых функций для последующего их вызова по onclick:)
Писать все в onclick="...." громоздко, а в <script> бразуер эти функции не видел (в чем собственно и был мой вопросsmile). Выносить в отдельный .js тоже было нельзя, ибо тело функции генерировалось динамически на сервере.
PM MAIL WWW ICQ   Вверх
Sardar
Дата 28.8.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(kkorsakoff @  28.8.2006,  21:57 Найти цитируемый пост)
а в <script> бразуер эти функции не видел

Странно, это как? Подзагрузка таких динамических скриптов как предложил vasac, должно и будет работать, собственно на этом "псевдо аякс"/JSON и построен.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.