1

Тема: HTA Свернуть, развернуть окно и F5

Если нажать F5 при полностью раскрытом окне, то перестаёт работать стандартная кнопка Свернуть/Развернуть окно. Если F5 не трогать, то всё работает.
Что это?, очередной сюрприз ИЕ. Можно обойти?

2

Re: HTA Свернуть, развернуть окно и F5

Я думаю что это не баг. Я вас правильно понял, вы говорите про кнопку "Свернуть в окно/развернуть", а не про "Свернуть/развернуть"?

Пусть у нас открывается HTA окно, с размером 300х200 пикселей а разрешение экрана например 1280х1024
При нажатии "Свернуть/Развернуть" будет происходить переключение окна между 300х200 <-> 1280х1024 (на самом деле не 1280х1024, а меньше, но не суть). Причем в при развернутом окне, его не переместить за заголовок, ни изменить размер взяв за угол окна, нельзя, а при 300х200 можно делать с окном все что хочешь.

При нажатии F5 в полноэкранном режиме происходит обновление не только содержимого, но и видимо, запомненных размеров не развернутого окна. Кнопка, как вы заметили не блокируется, а продолжает работать, но уже не между 300х200 <-> 1280х1024, а между 1280х1024 <-> 1280х1024. Вот собственно и все.
Нужно просто в свернутом в окно режиме (когда на кнопке 1 окно а не 2), изменить режим окна вручную, потянув за край и все будет работать по-прежнему.

Как вариант, можно вообще отключить обновление:

<body onKeyDown="if(event.keyCode==116){return false;};">

или например при обновлении менять размер окна

<body onKeyDown="if(event.keyCode==116){window.resizeTo(300,200)};">

В общем все зависит от того, что на самом деле нужно.

Нас невозможно сбить с пути, нам пофигу куда идти.

3

Re: HTA Свернуть, развернуть окно и F5

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

P.S.
Сейчас идея осенила, надо в осле это попробовать.

4

Re: HTA Свернуть, развернуть окно и F5

Ещё раз спасибо, получилось.
Только не понятно, почему работает только если всё написано в боди?
Пытался положить в функцию, не получилось.

5

Re: HTA Свернуть, развернуть окно и F5

Если в HTA нет элемента HTA:APPLICATION, то его окно ведёт себя как положено: будучи развёрнутым на весь экран, а затем обновлённым, сохраняет возможность восстановления прежнего размера.

Если же элемент HTA:APPLICATION есть, то при обновлении происходит его повторное применение: если в нем указано windowState=normal (а если явно и не указано, то подразумевается по умолчанию), то окно сохраняет текущие размеры, но считается неразвёрнутым.
Строго говоря подобное происходит, при всяком обновлении элемента HTA:APPLICATION, например, при переходе по ссылке, или изъятии этого элемента и повторной вставке для изменения каких-либо задаваемых им свойств, например значка окна — при этом все свойства применяются заново (а те, которые явно не заданы, принимают значения по умолчанию; за исключением navigable, которое без явного переопределения сохраняет предыдущее значение).

Возможное решение: при открытии приложения проверять какую-либо сеансовую куку: если она не установлена — установить и вставить элемент HTA:APPLICATION, например с помощью document.write(); если установлена — нечего не делать.
(Возможное затруднение — если окажется установлена не сеансовая, а дисковая кука с тем же именем; но это не существенно, просто надо подобрать более длинное имя.)

<HTML>
<HEAD><TITLE>HTA:APPLICATION и обновление окна</TITLE>
<SCRIPT language='JavaScript'>
if (document.cookie.indexOf("HTA=1")<0) {
    //проверка на наличие куки довольно упрощённая - лишь для примера
  document.write("<HTA:APPLICATION icon='explorer.exe'/>");
  document.cookie="HTA=1";
}
</SCRIPT>
</HEAD>
<BODY>
<P>Разверните окно, нажмите F5, а затем попробуйте его восстановить.</P>
</BODY></HTML>

Кстати, ещё один положительный эффект — исчезло моргание окна при его обновлении.

К сожалению, это решение не подходит для случая принудительного изменения свойств HTA:APPLICATION (например, для смены значка окна). Полноценное решение было бы возможно, если можно было бы узнать не только размеры, но и текущее состояние окна или отследить его переключение; но как это сделать я не догадываюсь.

6

Re: HTA Свернуть, развернуть окно и F5

wisgest пишет:

(Возможное затруднение — если окажется установлена не сеансовая, а дисковая кука с тем же именем; но это не существенно, просто надо подобрать более длинное имя.)

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

7

Re: HTA Свернуть, развернуть окно и F5

wisgest, спасибо, но всё работает.

Возможно в следующий раз попробую использовать данные рекомендации.


Кстати, ещё один положительный эффект — исчезло моргание окна при его обновлении.

Непонятно, о чём это?

8 (изменено: wisgest, 2011-08-06 11:52:46)

Re: HTA Свернуть, развернуть окно и F5

Любитель пишет:

спасибо, но всё работает.

Как я понял, ты просто отключил обновление и тебя это устраивает.
Но общая проблема, описанная тобой в первом сообщении этой темы от этого не исчезла.

Любитель пишет:

Непонятно, о чём это?

Возможно, что это зависит от технических характеристик монитора, его настроек, быстродействия процессора.
Лично у меня при использовании обычного

<HTA:APPLICATION icon='explorer.exe'/>"

вместо предложенного

<SCRIPT language='JavaScript'>
if (document.cookie.indexOf("HTA=1")<0) {
    //проверка на наличие куки довольно упрощённая - лишь для примера
  document.write("<HTA:APPLICATION icon='explorer.exe'/>");
  document.cookie="HTA=1";
}
</SCRIPT>

факт обновления окна гораздо заметние, причем не только его содержимого, но перерисовываются и его внешние элементы оформления.