Что нового

[Окна, Диалоги] Закрытие окна IE, открытого java-скриптом (popup)

Ocago

Новичок
Сообщения
35
Репутация
0
Все привет..
Покурил форум(и этот и родной, англоязычный), но что-то ответа не нашёл на простой вроде вопрос.
Как закрыть дополнительное окно (попап) вызванное жабовым сценарием на рабочей странице? В частности на ссылках стоят функции "onClick=windows.open.. блаблабла"
Т.е. всё что надо, работает - скрипт находит нужную ссылку и переходит с эмуляцией клика, но с вызовом жабы - в результате вылетает новое окно.

Вот кусок кода для примера, чисто:
Код:
#include <IE.au3>
$oIE = _IECreate("page.html", 0, 1, 0)

$sMyString = "AUTOS"
$oLinks = _IELinkGetCollection($oIE)
$hwnd = _IEPropertyGet($oIE, "hwnd")

For $oLink in $oLinks
	$sLinkText = _IEPropertyGet($oLink, "innerText")
	If StringInStr($sLinkText, $sMyString) Then
		_IEAction ($oLink, "focus")
		ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")
		ExitLoop
	EndIf
Next
sleep(2000)

_IEQuit ($oIE)

Т.е. в результате генерится вначале одно окно браузера и в нем ищется ссылка.
Но, ссылки сделаны с вызовом window.open - т.е. попапа - выскакивает второе окно с нужной ссылкой.

В конце обычной процедурой IEQuit ($oIE) - закрывается только первое окно.
попап остаётся открытым :wacko:

Кончено, можно просто закрыть весь процесс IE (ProcessClose("iexplore.exe"))
Но, как-то не гуманно получается :smile:
Потом при открытии браузера - начинает он орать, что "-сессии предыдущие были не завершены, открыть их или нет?"
Хотелось-бы культурно закрыть все окна.
Есть такой способ? может я плохо искал? Но, как-то с этим вот проблема.

Помогите, кто уже вкурил хорошо этот вопрос :smile: пожалуйста..
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Ocago
Как вариант, начиная с версии IE7 выставить галочку в настройках браузера, открывать новые окна во вкладках.
 
Автор
O

Ocago

Новичок
Сообщения
35
Репутация
0
Это да, согласен.
Но, не элегантное решение :smile:
Только если можно эту настройку браузера прямо из скрипта изменить.
А, кстати, можно-ли такие настройки менять скриптом?

И ещё, пытался через параметр hwnd как-то подуступиться - пока не вышло.
У всех окон он одинаковый - что у родителя (на котором ссылки) - что у попапов.
Пока идей нет больше.
Через что ещё можно было-бы эти окна идентифицировать?
 

aranea

Новичок
Сообщения
27
Репутация
4
ключ реестра отвечающий за открытие новых окон во вкладках.
Код:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TabbedBrowsing
"PopupsUseNewWindow"=dword:00000000 - способ открытия определяет IE
"PopupsUseNewWindow"=dword:00000001 - всплывающие окна в новом окне
"PopupsUseNewWindow"=dword:00000002 - всплывающие окна в новой вкладке
Но применение требует перегрузки браузера
у меня IE8, но этот параметр думаю одинаков с IE7
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Ocago [?]
Это да, согласен.Но, не элегантное решение
Настроить раз, и забыть! Это не элегантное решение?! ;D

А, кстати, можно-ли такие настройки менять скриптом?
Скорее всего, да.

И ещё, пытался через параметр hwnd как-то подуступиться - пока не вышло.
Код:
#include <IE.au3>
$oIE = _IECreate("http://google.ru")
$oForm = _IEFormGetObjByName($oIE, "f")
$oInputs = _IEFormElementGetObjByName($oForm, "q")
_IEFormElementSetValue($oInputs, "Autoit")
_IEFormSubmit ($oForm)

$hIEFrame1 = WinGetHandle ("[CLASS:IEFrame]")

$oLinks = _IELinkGetCollection ($oIE)
For $oLink In $oLinks
	If $oLink.href = "http://www.oszone.net/3663" Then
    _IEAction ($oLink, "click")
	EndIf
Next

$hIEFrame2 = WinGetHandle ("[CLASS:IEFrame]")

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 217, 75, 192, 114)
$Button1 = GUICtrlCreateButton("Close 1", 24, 24, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Close 2", 112, 24, 75, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			WinClose($hIEFrame1)
		Case $Button2
			WinClose($hIEFrame2)
	EndSwitch
WEnd




Добавлено:
Сообщение автоматически объединено:

Handle - у окон разные, они не могут быть одинаковыми.
 
Автор
O

Ocago

Новичок
Сообщения
35
Репутация
0
Таки да, получилось таким образом закрыть попапы - большое спасибо за подсказку :beer:

Там только нюансы с задержками - если надо не одно, а пару-тройку окон открыть - то обязательно загрузки содержимого видно надо дождаться, иначе сбой - начиная с 3его окна не закрывает.
Однако, если поставить хотя-бы sleep-ы между вызовами окон и получением $hIEFrame (в WinGetHandle) - то всё адекватно работает и тихо закрывает без прерываний нехороших.
Опытным путём определил что Sleep(500) минимальное значение, после которого WinGetHandle адекватно передаётся в переменную и можно окном работать.

Либо нужно что-то типа _IELoadWait воткнуть. Ещё не пробовал.
Наверняка есть решение как получить моментально Handle попапа и сразу его обработать(прикрыть например).

В любом случае спасибо - решение задачи продвинулось сильно вперёд. :smile:



Добавлено:
Сообщение автоматически объединено:

aranea сказал(а):
ключ реестра отвечающий за открытие новых окон во вкладках.
Код:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TabbedBrowsing
"PopupsUseNewWindow"=dword:00000000 - способ открытия определяет IE
"PopupsUseNewWindow"=dword:00000001 - всплывающие окна в новом окне
"PopupsUseNewWindow"=dword:00000002 - всплывающие окна в новой вкладке
Интересная мысль - а чем в AutoIt можно воздействовать на реестр? Где копать примерно хоть? Или примерчик, если можно, реализации.. буду благодарен :smile:
 

aranea

Новичок
Сообщения
27
Репутация
4
а чем в AutoIt можно воздействовать на реестр
Работа с реестром в справке:
http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm
http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm
http://www.autoitscript.com/autoit3/docs/functions/RegDelete.htm
 
Автор
O

Ocago

Новичок
Сообщения
35
Репутация
0
aranea сказал(а):
Работа с реестром в справке:
Выкурил немного справки - помогло :smile: Отлично срабатывает переключение в режим "попапы во вкладках". Спасибо.

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

aranea

Новичок
Сообщения
27
Репутация
4
Если в настройках браузера это настраивается, то в реестре это можно найти, в большинстве случаев.
 
Автор
O

Ocago

Новичок
Сообщения
35
Репутация
0
aranea сказал(а):
Если в настройках браузера это настраивается, то в реестре это можно найти, в большинстве случаев.
А где-бы поискать какие ключи реестра за какие настройки браузера отвечают (и их значения?)
Вот к примеру - "включить блокировку попапов".. "Удалить историю"
Может есть где толковый справочник этого дела?
 

aranea

Новичок
Сообщения
27
Репутация
4
Ocago
Есть программы делающие снимки реестра, т.е. делается снимок до изменения и после, а затем снимки сравниваются.
Я использую RegSnap, но есть и другие.
Ну и для комфортного серфинга по реестру нужна замена стандартному regedit, я использую Registry Workshop.


Добавлено:
Сообщение автоматически объединено:

Registry Workshop кста тоже может сравнивать снимки реестра
 
Автор
O

Ocago

Новичок
Сообщения
35
Репутация
0
Спасибо - воспользуюсь.
 
Верх