1 (изменено: Аскет, 2011-01-15 17:32:37)

Тема: HTA: обработка событий IFRAME

Имеем документ с iframe. Как отловить события iframe'а из родительского окна, в данном случае - onkeydown когда в фокусе находится именно iframe?

И ещё один геморой.
Как получить код нажатой клавиши из VBScript? (event.keyCode не работает).


<iframe WIDTH=50% height=50% SRC="C:\1.TXT" id="iframe1"> Conten</iframe>

<script language=VBS>
SUB document_onkeydown()
    msgbox "нажатие в родительском документе" 
END SUB
</script>

2

Re: HTA: обработка событий IFRAME

Возможно я не совсем корректно поставил вопрос. Перефразирую для более ясного понимания.

Как прикрутить обработчик событий (функцию) к событиям в <IFRAME>?

3 (изменено: wisgest, 2011-01-16 14:23:41)

Re: HTA: обработка событий IFRAME

Аскет пишет:

Как получить код нажатой клавиши из VBScript? (event.keyCode не работает).

A window.event.keyCode?

Аскет пишет:

Как прикрутить обработчик событий (функцию) к событиям в <IFRAME>?

Например,

<iframe WIDTH=50% height=50% SRC="C:\1.TXT" id="iframe1"></iframe>

<script language=VBS>
SUB onkeydown1()
    msgbox "нажатие в iframe1, код клавиши: "  & Me.parentWindow.event.keyCode
END SUB

Set iframe1.document.onkeydown = GetRef("onkeydown1")
</script>

4

Re: HTA: обработка событий IFRAME

Фух...Спасибо!

5

Re: HTA: обработка событий IFRAME

Гм.. А как быть если фрейм в состоянии дизмода?

<button onclick="iframe1.document.designMode='on'">Edit</button>

6

Re: HTA: обработка событий IFRAME

Опыт (правда, не над фреймом, а над дочерним окном, открытым с помощью window.open()) показывает, что после изменения document.designMode обработчик onkeydown сбрасывается, т.е. становится null.
Таким образом, после каждого переключения режима правки/просмотра надо восстанавливать значение обработчика и он снова действует.
----
OFF: какой-то редактор пишешь?

7

Re: HTA: обработка событий IFRAME

Кстати,вместо

document.designMode="on"

можно использовать

document.body.contentEditable="true"

и в таком случае обработчик для document сбрасываться не должен
и вообще можно обойтись без фреймов, используя в качечтве области редактирования, например, элемент DIV с установленным свойством/атрибутом contentEditable.

8

Re: HTA: обработка событий IFRAME

wisgest пишет:

OFF: какой-то редактор пишешь?

Угу.

Ну точно, contentEditable! А я как то на него подзабил, не думал что его и к body можно применить. И события все работают.

и вообще можно обойтись без фреймов

Да нет, DIV тут мягко говоря неуместен, не загружать же в него элементы из высших иерархий.
Негоже холопу да с боярами, того самого.
Хотя чем чёрт не шутит...


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

Не покажешь каким образом это делается? На будующее.

9

Re: HTA: обработка событий IFRAME

<iframe WIDTH=50% height=50% SRC="C:\1.TXT" id="iframe1"></iframe>

<script language=VBS>
SUB onkeydown1()
    document.getElementById("KeyCode").value = Me.parentWindow.event.keyCode
END SUB

SUB SetDesignMode(mode)
 iframe1.document.designMode = mode
 Set iframe1.document.onkeydown = GetRef("onkeydown1")
END SUB

SetDesignMode "off"
</script>

<BR>
<button language=VBS onclick='SetDesignMode "on"'>Edit</button>
<button onclick='VBS:SetDesignMode "off"'>View</button>
<BR>
Код нажатой во фрейме клавиши:&nbsp;<INPUT id=KeyCode>
Аскет пишет:

Да нет, DIV тут мягко говоря неуместен, не загружать же в него элементы из высших иерархий.

Кажется, DIV — универсальный элемент в который всё влезет, кроме самого BODY, конечно.

10

Re: HTA: обработка событий IFRAME

wisgest пишет:

Кажется, DIV — универсальный элемент в который всё влезет, кроме самого BODY, конечно.

Секция на то и секция. Но тут как раз body, ну или document.
Но, в принципе, для простеньких невалидных(неполных) документов потянет.

Ещё раз спасибо за разъяснение.