>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Открытие диалога и управление им http://forum.mozilla-russia.org/viewtopic.php?id=10389 |
sutni > 18-05-2006 16:00:29 |
Задача: Какие есть нормальные решения задачи? |
Anton > 18-05-2006 16:43:04 |
sutni пишет
А если убрать ww.open() ? |
sutni > 18-05-2006 16:53:24 |
Если убрать open(), то не появляется мой диалог. |
Anton > 18-05-2006 17:09:17 |
sutni пишет
А почему ? Так задумано, что ли ? Т. е., он в *.xul так настроен ? Диалог открывается по openDialog, а новое окно браузера - по open. |
sutni > 18-05-2006 17:21:04 |
Вовсе нет. Вот заголовок xul: Если вместо |
CVB > 18-05-2006 17:44:37 |
а если так попробовать ! Выделить код Код:aaa.js function WinisRun(win) { // win - указатель на окно } bbb.xul <script type="application/x-javascript" src="chrome://.../content/aaa.js"/> <window id="qsWaiterWindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="WinisRun(this)"> |
Anton > 18-05-2006 17:48:13 |
sutni пишет
Ну... не знаю. У меня оба варианта работают. |
CVB > 18-05-2006 17:49:30 |
Вроде можно ещё так |
sutni > 18-05-2006 17:50:05 |
Немного разобрался. open() действительно лишний. Проблема в следующем коде: Функция foo определена в диалоге и занимается его перерисовкой (меняет value у элементов диалога). Так вот перерисовка элементов на диалоге не происходит. (Наверное точнее сказать, что функция вызывается, значения элементов меняются, но окно не перерисовывается.) Если например в foo() после присвоения новых значений вставить alert, то новые значения будут видны. Иначе нет. Или обеспечить в диалоге принудительную перерисовку (обновление) в конце функции foo() |
Anton > 18-05-2006 19:42:42 |
sutni пишет
Скорее всего, неправильно меняете состояние элементов (А value, вроде, вообще на отображение элементов никак не влияет). У меня работает следующий код: Выделить код Код:<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <dialog id="window" title="0" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript"> function hello () { alert ("hello"); } function tick_dialog () { var flag = document. getElementById ("cb000"). getAttribute ("checked"); flag = !flag; document. getElementById ("cb000"). checked = flag; window. setTimeout (tick_dialog, 200); } </script> <checkbox id="cb000" checked="true" label="1"/> </dialog> который я запускаю из Custom Button скриптом: Выделить код Код:var ww = openDialog("file:///P:/xul/winn.xul", "", "chrome,dialog=yes,modal=false, centerscreen"); window. setTimeout (function () {ww.tick_dialog()}, 1000); |
sutni > 19-05-2006 09:15:41 |
А если в Вашем примере попробовать выполнить след. код Выделить код Код:var ww = openDialog("file:///P:/xul/winn.xul", "", "chrome,dialog=yes,modal=false, centerscreen"); window. setTimeout (function () {ww.tick_dialog()}, 1000); for (var i=0;i<999999999;i++) { var k=i; } То отображение диалога произойдёт только после выполнения цикла. В этом вся и засада. А value я меняю у элемента label так: Выделить код Код:function animateDotter() { var t=document.getElementById('qsWaiterTitle'); var s=getString("waitlabel"); l_curDotCount+=1; var ti=l_curDotCount%(l_maxDotCount+1); t.setAttribute('value',s+ti); } |
sutni > 19-05-2006 11:02:48 |
Сделал. По извращенному, но других путей не вижу. Выделить код Код:var ww = openDialog("file:///P:/xul/winn.xul", "", "chrome,dialog=yes,modal=false, centerscreen"); window. setTimeout (function () {ww.tick_dialog()}, 1000); for (var i=0;i<999999999;i++) { var k=i; } то цикл выносится в отдельную функцию. Даже не сам цикл а только его тело. Заводится глобальная переменная показывающая текущий шаг цикла. А в функции происходит рекурсивный вызов через setTimeout с инкрементом шага. Теперь есть возможность проводить обновление диалога при каждом шаге. Если у народа есть более удачные решения - всегда рад выслушать. |