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

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

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


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

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

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


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

var evt = document.createEventObject();


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

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

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

Пример как то так sikuda.ru
12. GusevNA 357 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 670 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 Ответить
Оставьте свое сообщение
Вакансии
Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день

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

Бизнес-аналитик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий консультант 1С:ERP
Москва
зарплата от 200 000 руб.
Полный день