Что нового

Работа с модальным окном simplemodal jquery

randal

Новичок
Сообщения
21
Репутация
4
Долго пытал форум, но нашёл только как нажимать на кнопки в таких окнах, а считывание текста внутри почему-то нет :(
В общем, стоит задача определять наличие такого окна, считывать из него текст (содержимое бывает разное) и жать на кнопки в зависимости от результата
Готовый рецепт не прошу, хотя бы подскажите сам принцип взаимодействия :-[
Вид окна во вложении, открыто в инспекторе кода Оперы. Сам код:
Код:
<div id="result-dialog" class="messenger hidden simplemodal-data" style="display: block;">
<p id="betresult">Ваша ставка принята, спасибо</p>
<div id="detail-result" class="detail-result hidden" style="display: none;">
<p id="detail-result-content"></p>
<div id="deposit-msg" class="deposit-msg hidden" style="display: none;">
<p>Пожалуйста, используйте ссылку <button type="submit" class="button yes simplemodal-close" onclick="location.href = '/su/deposit.htm'"><span>Внести средства</span></button>, чтобы пополнить баланс.</p>
</div>
</div>
<div class="buttons messenger-but">
<button type="submit" id="ok-button" class="button no simplemodal-close" style="display: inline-block;"><span>OK</span></button>
<button type="submit" id="print-bet" class="button no simplemodal-close" style="display: inline-block;">
<span>Распечатать</span>
</button>
<button type="submit" id="deposit-button" class="button yes simplemodal-close hidden" onclick="location.href = '/su/deposit.htm'" style="display: none;"><span>Внести средства</span></button>

<button type="submit" id="cancel-button" class="button btn-cancel no simplemodal-close hidden" style="display: none;"><span>Отказаться</span></button>
<button type="submit" id="place-changed-terms" class="button no simplemodal-close hidden" style="display: none;"><span>Сделать ставку с изменившимися условиями</span></button>
<button type="submit" id="place-amended-stake" class="button no simplemodal-close hidden" style="display: none;"><span>Сделать ставку с изменившимися условиями</span></button>
</div>
</div>
modal.png
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Как-то так:
Код:
#include <IE.au3>

$oIE = _IEAttach('', 'instance')						; Цепляется к окну IE (в нем у меня уже открыта страница с этим исходным кодом)
$oDiv = $oIE.document.getElementById('result-dialog')	; Взять элемент с ID result-dialog
If Not IsObj($oDiv) Then Exit							; Если такого элемента нет, выходим
MsgBox(4096, "", $oDiv.innertext)						; Показать весь текст внутри этого div`а. Так можно проверять наличие нужного текста

$oButton = $oDiv.document.getElementById('ok-button')	; Возвращает элемент с ID ok-button внутри этого div`а
MsgBox(4096, $oButton.id, $oButton.innertext)			; ---ОК

$oElements = $oDiv.getElementsByTagName('*')			; Возвращает всю колекцию элементов внутри div`а. Вместо * можно указать название тега
For $oElement In $oElements								; Для каждого элемента в коллекции...
   ConsoleWrite(' - ID: ' & $oElement.id & @CRLF)
   ConsoleWrite(' - Текст: ' & $oElement.innertext & @CRLF)		; Записать в консоль ID, текст и html внутри элемента
   ConsoleWrite(' - HTML:' & $oElement.innerhtml & @CRLF & ' --- ' & @CRLF)
Next

If StringInStr($oDiv.innertext, 'Ваша ставка принята') Then	; Если есть текст "Ваша ставка принята"
   $oButton = $oDiv.document.getElementById('ok-button')	   ; Кликнуть по кнопке OK
   $oButton.focus()
   $oButton.click()
EndIf
 
Автор
R

randal

Новичок
Сообщения
21
Репутация
4
gunter123
Спасибо, очень помогли. Документация по языку довольно скудная :( Изначально ввело в заблуждение то, что через _IEDocReadHTML динамические объекты не видны, поэтому думал что к ним нужно как-то по-хитрому обращаться. Оказалось всё проще :smile:
Кстати, если вдруг кто-то ещё столкнётся с simplemodal, то активное окно (которое отображается) имеет класс "messenger hidden simplemodal-data", соответственно проверку на наличие любого окна лучше делать через поиск этого класса:

Код:
$oDiv = $oIE.document.getElementsByClassName('messenger hidden simplemodal-data')
If $oDiv.length > 0 Then ...  ; как только такой элемент найдётся, длина массива станет больше 0. Проверка через IsObj($oDiv) почему-то не работает
; обрабатываем событие (читаем окно и т.д)
EndIf
 
Верх