Отловить событие из JavaScript в 1С

1. sound 536 16.06.10 11:16 Сейчас в теме
Привет всем!
На форме есть ПолеHTMLДокумента, текст html формируется динамически,
где то в html документе есть, например, кнопка

<button onclick=""test()"">Нажми меня</button>


При нажатии на кнопку срабатывает функция test(). Каким образом среда 1С (ПолеHTMLДокумента или форма) может узнать о наступлении этого события?

Вот вызвать функцию test() из среды 1С можно так:

Рез = ЭлементыФормы.ПолеHTMLДокумента.Документ.parentWindow.eval("test()")


А как отловить событие?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. sound 536 16.06.10 13:31 Сейчас в теме
(2) не уверен, что оно мне надо
4. venger 2124 16.06.10 13:58 Сейчас в теме
(3) Может через COM-соединение "достучаться" из JavaScripta до 1С, выполнить функцию 1С из JavaScripta?
6. sound 536 16.06.10 19:32 Сейчас в теме
(4) не через Com это жесть.

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

со стороны javascript, завел глобальную переменную procParam (знаю что плохо)
var evt = document.createEventObject();
document.body.procParam = pParam;
document.body.fireEvent('onhelp', evt);


со стороны 1С в поле html документа ловится событие "onhelp" (для примера)
Процедура ПолеHTMLonhelp(Элемент, pEvtObj)
	Попытка
		htmlElement = pEvtObj.srcElement;
		procParam    = htmlElement.document.body.procParam;
		Справочники.[ХЗ].НайтиПоКоду(procParam).ПолучитьФорму().Открыть();
	Исключение
	КонецПопытки;
КонецПроцедуры
Показать
adhocprog; Djoin; its64; borrman; +4 Ответить
8. boogie 490 12.09.10 14:21 Сейчас в теме
(6) Гениально! Я мучил onpropertychange, оно упорно не хотело вызывать событие в 1С, которое я задавал, а onhelp работает! И главное никто не вызовет в отличие от onkeypress например :)
10. borrman 06.06.13 18:58 Сейчас в теме
(6) Супер! Как раз то, что нужно было

var evt = document.createEventObject();


А нельзя никакие доп. поля или параметры передать через этот evt?
Чтобы можно было анализировать конкретное событие?
Или можно ли как-то собственные события отлавливать?
5. Душелов 4018 16.06.10 14:52 Сейчас в теме
(2) Не то
(4) Как жестоко-то!

(1) Вообще, нужно открыть MSDN и посмотреть события ActiveX Internet Explorer'а и уже подписаться из 1С на нужные.
7. Душелов 4018 16.06.10 20:29 Сейчас в теме
Есть еще вариант -
Получаешь ссылка на 1С-ный объект, лучше всего техническую обработку, как сделано в путеводителе и т.п.

В яве открываешь эту ссылку, в технической обработке при открытии делаешь оповещение открытых форм и сразу ее закрываешь, а в текущей форме подключаешь обработчик оповещения.
9. пользователь 27.04.12 17:01
Сообщение было скрыто модератором.
...
11. sikuda 677 09.07.13 13:55 Сейчас в теме
В старых IE толко всплывающие события javascript.ru и можно отловить его на поле HTML.

Пример как то так sikuda.ru
12. GusevNA 361 22.04.14 02:37 Сейчас в теме
Есть еще вариант передать в JavaScript ссылку на 1С-форму, а при событии из JavaScript вызывать экспортную функцию из модуля 1С формы.
Пример тут:
http://x1c.ru/kak_visvat_1c_is_js/
Проверено в 8.2.19.83 и 8.3.4.465
13. sikuda 677 26.06.15 13:04 Сейчас в теме
Проще примерно так:
Procedure htmlOnClick(Item, EventData, StandardProcessing)
	data1C = EventData.event.data;                
	If ValueIsFilled(data1C) Then
		status = String(data1C);
	Else
		status = "stop";
	EndIf;
	EventData.Document.getElementbyId("Raphael").setAttribute("data-status", status);
	EventData.Document.getElementbyId("handle").click();	
EndProcedure
Показать
14. its64 31.08.15 15:17 Сейчас в теме
У меня получилоcь так:
javascript
		var evt = document.createEventObject();
		evt.data = "Есть Маркер"
		document.body.fireEvent('onclick', evt);

1c
Процедура 
ПолеHTMLonclick(Элемент, pEvtObj)
	
	Событие = pEvtObj.data;
	Если Событие = "Есть Маркер" Тогда
		Сообщить("Ура" + Событие);
	КонецЕсли;
	
КонецПроцедуры
Показать
15. its64 31.08.15 17:46 Сейчас в теме
Вот еще на тему createEventObject согласно которой наковырялось вот что:
function ahtung(EventText) {
        if (document.createEventObject) {   // IE before version 9
            var clickEvent = document.createEventObject(window.event);
            clickEvent.data = EventText;  
            document.body.fireEvent("onclick", clickEvent);
                    }else{
			if (document.createEvent("MouseEvent")) {     // all browsers except IE before version 9
                var clickEvent = document.createEvent("MouseEvent");
                clickEvent.initMouseEvent ( "click", false,false,window,	0, 0, 0, 0, 0, false, false, false, false, 0, null);
		clickEvent.data = EventText;								
                document.body.dispatchEvent(clickEvent);
                } 
        }
}
Показать
vl_lv; dablack; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот