Не работает код в FireFox

Spavel_74

Новичок
Не работает код в FireFox

Мой вопрос полность относится к JavaScript.

Отрепетеровав все скрипты на Opera и IE, поставил Mozilla.
В консоли ошибок всё ок но:

1 выдаэтся сообщение при нажатии кнопки ">>" - "Скрипт на этой странице возможно занят или неотвечает ...... Остановить, продолжить"
Это из-за кода в файле formtest.js

PHP:
evaltext=evaltext+"	  i=0;\n";
evaltext=evaltext+"	  while(i != 1)\n";
evaltext=evaltext+"	  {\n";
evaltext=evaltext+"	     if (!"+ namewin +".closed)\n";
evaltext=evaltext+"	     {\n";
evaltext=evaltext+"	       if ((!"+ namewin +".closed) && ("+ namewin +".document.getElementById('ItBody')!=null)) {i=1; break;}\n";
evaltext=evaltext+"	     } else break;\n";
evaltext=evaltext+"	  }\n";
это делается чтобы дождатся доступа к объекту body в новом окне, затем установить свойства

PHP:
evaltext=evaltext+"	      "+ namewin +".document.body.resourceobj =  name_resourceobj;\n";
evaltext=evaltext+"	      "+ namewin +".document.body.priflabel = name_priflabel;\n";
Речь идёт об установки свойст body для ново - открывающегося окна.
Вообще чесно говоря мой подход ждать пока будет доступен body как while , мне самому ни сильно нравится , а как лучше сделать я несоображу. Помогите плиз

Пример :
http://www.web-catalog.info/scriptbet/ - рабочая версия под Opera и IE

Посмотреть внутриности openmoredata.php
http://www.web-catalog.info/scriptbet/openmoredata.txt
 

Magiys

Новичок
Цикл... мда. В крайнем случае таймер.
А еще лучше ставить на onload, еще можно вставить конструкцию в после </body>:
<script>init()</script>, init - функция, которую необходимо выполнить.
Так что вариантов множество.
 

dimagolov

Новичок
Spavel_74
забудь о том, что такая ф-я как eval() существует. жизнь много приятнее станет, поверь.
 

Spavel_74

Новичок
Автор оригинала: Magiys
Цикл... мда. В крайнем случае таймер.
А еще лучше ставить на onload, еще можно вставить конструкцию в после </body>:
<script>init()</script>, init - функция, которую необходимо выполнить.
Так что вариантов множество.
Таймер нельзя т.к незнаешь когда загрузится поставишь 5 а загрузится через 6.
Что мне дают такие маникуляции с инит в новом окне. Ровным счётом ничего т.к. у родтелю опять надо спрашивать загрузилось ли окно.
Можно бы сделать так если бы мне ненадо было таскать переменные name_resourceobj,name_priflabel

-~{}~ 18.01.08 07:37:

Автор оригинала: Magiys
Цикл... мда. В крайнем случае таймер.
А еще лучше ставить на onload, еще можно вставить конструкцию в после </body>:
<script>init()</script>, init - функция, которую необходимо выполнить.
Так что вариантов множество.
Ваш пример выглядит так?
окно 1
PHP:
<script>
 fun ropen()
 {
 var a = window.open();
 var s = "dfdkfjkdjf";
 }

 fun irmin()
 {
   // от куда здесь взять a,s
 }

ropen()
</script>
окно 2
PHP:
<script>window.opener.irmin()</script>
 

Magiys

Новичок
Автор оригинала: Spavel_74
Таймер нельзя т.к незнаешь когда загрузится поставишь 5 а загрузится через 6.
Что мне дают такие маникуляции с инит в новом окне. Ровным счётом ничего т.к. у родтелю опять надо спрашивать загрузилось ли окно.
Можно бы сделать так если бы мне ненадо было таскать переменные name_resourceobj,name_priflabel
Таймер нужно ставить на одну секунду, если не загрузилось то ставить опять и так далее....
Автор оригинала: Spavel_74
-~{}~ 18.01.08 07:37:
Ваш пример выглядит так?
окно 1
PHP:
<script>
 fun ropen()
 {
 var a = window.open();
 var s = "dfdkfjkdjf";
 }

 fun irmin()
 {
   // от куда здесь взять a,s
 }

ropen()
</script>
окно 2
PHP:
<script>window.opener.irmin()</script>
В этом случае действительно никак, но, если переменные a и s сделать глобальными, то все будет работать.
 

dimagolov

Новичок
Spavel_74, скажи, а зачем у тебя
Код:
var temp="obj=document."+fel.id+"."+nameopermore+";";

try {eval(temp);}
catch (exception) {obj=null; fieldform_id=null;}
чем тебя не устраивает в крайнем случае синтаксис
Код:
obj=document[fel.id]?document[fel.id][nameopermore]:null;
if (!obj) fieldform_id=null;
ну и дальше аналогично. зато никаких боков с отладкой eval-ов.
 

Spavel_74

Новичок
Автор оригинала: dimagolov
Spavel_74, скажи, а зачем у тебя
Код:
var temp="obj=document."+fel.id+"."+nameopermore+";";

try {eval(temp);}
catch (exception) {obj=null; fieldform_id=null;}
чем тебя не устраивает в крайнем случае синтаксис
Код:
obj=document[fel.id]?document[fel.id][nameopermore]:null;
if (!obj) fieldform_id=null;
ну и дальше аналогично. зато никаких боков с отладкой eval-ов.
Суть от этого не меняется. Меняется способ решения. Замечу мы уходим от от первоначально заданного вопроса.

-~{}~ 19.01.08 15:19:

Автор оригинала: Magiys
Таймер нужно ставить на одну секунду, если не загрузилось то ставить опять и так далее....
Вот сдесь поподробнее.
Я знаю что если установлен таймер то он всеволишь затармаживает операторы в таймере авсё после выполнится
PHP:
n=1;
setTimeout("n=2;",20);
n= 3;
тут получается что сначало n = 1, =3, =2
Но мне нужно дождатся пока n будет = 2, а потом присвоить 3

PHP:
a= window.open();
// вот тут нужно ждать пока body будет готово
a.body.resourceobj = "mhjhjhjh";
 

Magiys

Новичок
Автор оригинала: Spavel_74
Суть от этого не меняется. Меняется способ решения. Замечу мы уходим от от первоначально заданного вопроса.

-~{}~ 19.01.08 15:19:


Вот сдесь поподробнее.
Я знаю что если установлен таймер то он всеволишь затармаживает операторы в таймере авсё после выполнится
PHP:
n=1;
setTimeout("n=2;",20);
n= 3;
тут получается что сначало n = 1, =3, =2
Но мне нужно дождатся пока n будет = 2, а потом присвоить 3

PHP:
a= window.open();
// вот тут нужно ждать пока body будет готово
a.body.resourceobj = "mhjhjhjh";
Для этого необходимо занести действия, которы необходимо выполнить после загрузки body в функцию, пусть все в туже init(), которой в качестве параметров передавать a, s. И вызывать таймер с этой функцией и этими параметрами.
 

dimagolov

Новичок
Spavel_74
Суть от этого не меняется. Меняется способ решения.
суть того, что делает двтжок JS при исполнении данного кода меняеться кардинально. причем в разных броузерах eval реализован чуть-чуть, но по-разному.
я пытаюсь сказать, что писать так, как написано у тебя нельзя, отладить такой код тодже нельзя, можно только танцы с бубном устраиавать. если тебе такое нравиться - танцуй на здоровье.
я бы на твоем месте этот весь код переписал бы по-человечиски, и сокрее всего он бы после этого просто заработал бы нормально. и быстрей бы получилось, не говоря что лучше, но понятно, что решать тебе
 
Сверху