JavaScript + всплывающие окна?

  • Автор темы Автор темы Slam
  • Дата начала Дата начала

Slam

Новичок
JavaScript + всплывающие окна?

Как можно открыть окно с содержимым конкретной переменной?

То есть существует переменная с каким либо контентом. Как можно открыть всплывающее окно, чтобы показать содержимое данной переменной.

Я использую шаблонизатор Smatry и на определенном этапе, генерирую страницу и вывожу ее. Необходимо реализовать возможность открытия всплывающего окна для печатной версии. Чтобы не обращаться опять к серверу для генерации сходной страницы хочу также в шаблон передать переменную с содержимым всплывающего окна.
 
то есть, ты хочешь каждый раз при загрузке страницы - независимо от того, будет кто-то ее печатать, или нет, передавать текст для печати.
ты хорошо подумал?

так ли уж ужасно "обращаться опять к серверу ", как тебе кажется?
 
В данном случае да!
Дело в том, что переменные, которые используются для формирования контента уничтожаются. Ну, так нужно.
Поэтому хотелось бы сделать именно таким способом!
 
всплывающее окно знаешь как реализовать, знаешь какие параметры передаются?
 
window.open( [sURL] [, sName] [, sFeatures] [, bReplace]

Можно так!

<a href="#" onclick="window.open('url', 'param1', 'height=150px,width=250px,toolbar=no,menubar=no,location=no,status=yes,directories=no,xcenter=yes,ycenter=yes,dependent=yes,resizable=1,scrollbars=1'); return false;">Print</a>

Но это с заданным URL.

А как и куда переменную передать?
 
Slam

{capture}???
http://smarty.php.net/manual/ru/language.builtin.functions.php#language.function.capture

-~{}~ 17.06.07 00:09:

Чтобы не обращаться опять к серверу для генерации сходной страницы хочу также в шаблон передать переменную с содержимым всплывающего окна.
Вариант с {capture} "раздует" документ.

Я бы юзал
getElementById
 
Mr_Max,
Использовать {capture} здесь не очень удобно, потому что его нужно будет использовать в вызываемом окне.

А как готовую переменную "запихнуть" в окно?

AmdY,

Второй параметр ( в нашем случае это sName) - имя нового окна.
Используя имя в качестве значения атрибута TARGET команды <A> или <FORM>, можно вывести документы в это окно.

Но тогда документ нужно генерировать опять?
 
w = window.open....
w.document.write('текст');

-~{}~ 17.06.07 01:33:

Использовать {capture} здесь не очень удобно
Его неудобно использовать лишь потому, что документ в данном случае "раздуется" ровно на величину контента, который нужно "сдублировать" для печатной версии. Если контента очень мало - то на это можно не обращать внимания...

Избежать избыточного "дублирования" контента Вам поможет джаваскриптовый getElementById

его нужно будет использовать в вызываемом окне.
Если контента много то так делать НЕ нужно
w.document.write({$smarty.capture.capture_name|escape:javascript});
 
можно скопировать в новое окно тотже самый контент, что и в основном окне и с помощью CSS предать ему "печатный" вид, закачав в новое окно стили для печати... т.е. контент один а стилей 2, обычный и "для печати", и вместе с копированием контента в новое окно, скопировать и стили "для печати"... стили много не займут, а проблема с дублированием контента отпадет...
 
...и остается главный вопрос: зачем уродоваться, если можно просто правильно прописать печатные стили в самой странице...
 
Сделал вот таким образом:
Код:
function print_window()
{
w = window.open('', 'cart', 'height=400px,width=400px,toolbar=no,menubar=no,location=no,status=yes,directories=no,xcenter=yes,ycenter=yes,dependent=yes,resizable=1,scrollbars=1');
content = document.getElementById('account');
w.document.write(content.innerHTML);  		
}

Но есть маленькая проблема! Окно появляется с необходимым содержимым, но прогресс бар в строке состояния окна , как буд-то что-то догружает и так постоянно!
И это справедливо для Mozilla Firefox. Ни в IE6 ни в Opera 9 такого не наблюдается!

Далее, если добавить строку кода для печати:
Код:
if (typeof(w.print) != 'undefined') w.print();

Окно «Печать» в браузерах IE6 и Opera 9 не появляется вовсе. В Firefox, появляется всплывающее окно, но без содержимого и тут же появляется окно «Печать». Если закрыть стандартное окно «Печать», то теперь можно будет увидеть конвент во всплывающем окне.

Если же добавить такую строку кода для печати:
Код:
if (typeof(window.print) != 'undefined') window.print();

Проблема с содержимым в FireFox не изчезает, и во всех браузерах оно уходит, как-бы на задний план, но не окна печати и основного окна браузера и его вообще не видно.

Вот с такими проблемами я столкнулся.
Прошу поделиться своїми размышлениями по данному вопросу.
 
Сверху