Тема: HTA Свернуть, развернуть окно и F5
Если нажать F5 при полностью раскрытом окне, то перестаёт работать стандартная кнопка Свернуть/Развернуть окно. Если F5 не трогать, то всё работает.
Что это?, очередной сюрприз ИЕ. Можно обойти?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → Windows Script Host, HTA (VBScript, JScript) → HTA Свернуть, развернуть окно и F5
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Если нажать F5 при полностью раскрытом окне, то перестаёт работать стандартная кнопка Свернуть/Развернуть окно. Если 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)};">В общем все зависит от того, что на самом деле нужно.
DnsIs, спасибо, вполне возможно, что происходит запоминание, вот только у меня язык не поворачивается назвать это разумным.
Код обязательно попробую, мне это актуально.
P.S.
Сейчас идея осенила, надо в осле это попробовать.
Ещё раз спасибо, получилось.
Только не понятно, почему работает только если всё написано в боди?
Пытался положить в функцию, не получилось.
Если в 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 (например, для смены значка окна). Полноценное решение было бы возможно, если можно было бы узнать не только размеры, но и текущее состояние окна или отследить его переключение; но как это сделать я не догадываюсь.
(Возможное затруднение — если окажется установлена не сеансовая, а дисковая кука с тем же именем; но это не существенно, просто надо подобрать более длинное имя.)
Кстати, можно обойтись и без кук, учитывая, что свойство window.name доступно для записи и сохраняет значение при обновлении окна.
wisgest, спасибо, но всё работает.
Возможно в следующий раз попробую использовать данные рекомендации.
Кстати, ещё один положительный эффект — исчезло моргание окна при его обновлении.
Непонятно, о чём это?
спасибо, но всё работает.
Как я понял, ты просто отключил обновление и тебя это устраивает.
Но общая проблема, описанная тобой в первом сообщении этой темы от этого не исчезла.
Непонятно, о чём это?
Возможно, что это зависит от технических характеристик монитора, его настроек, быстродействия процессора.
Лично у меня при использовании обычного
<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>факт обновления окна гораздо заметние, причем не только его содержимого, но перерисовываются и его внешние элементы оформления.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться