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

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

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


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

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

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


А как отловить событие?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. sound 535 16.06.10 13:31 Сейчас в теме
(2) не уверен, что оно мне надо
4. venger 2121 16.06.10 13:58 Сейчас в теме
(3) Может через COM-соединение "достучаться" из JavaScripta до 1С, выполнить функцию 1С из JavaScripta?
6. sound 535 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 489 12.09.10 14:21 Сейчас в теме
(6) Гениально! Я мучил onpropertychange, оно упорно не хотело вызывать событие в 1С, которое я задавал, а onhelp работает! И главное никто не вызовет в отличие от onkeypress например :)
10. borrman 06.06.13 18:58 Сейчас в теме
(6) Супер! Как раз то, что нужно было

var evt = document.createEventObject();


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

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

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

Пример как то так sikuda.ru
12. GusevNA 359 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 673 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 Ответить
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день