Обратная связь из поля браузера в 1С
Иногда требуется что-то передать из поля браузера в 1С. Нашел решение на инфостарте, но оно уже устарело.
Но идея хорошая — вызывается событие onClick, а в этом событии содержатся уже необходимые данные для передачи в 1С.
Но в примере в JS используется устаревший, работавший только в IE метод FireEvent:
var evt = document.createEventObject(); // создадим пустой объект событие evt.propertyName = 'функц1'; // в реквизит propertyName предлагаю помещать название результата ( что-то вроде типа, или название функции от которой получили данные ) evt.data = '156'; //в реквизит data будем передавать данные результата document.body.fireEvent('onclick', evt);
Я попробовал использовать новый синтаксис, все работало без ошибок, но событие не вызывалось:
var evt = document.createEvent('Event'); evt.initEvent('onclick', 'zzz', 'bbb'); document.body.dispatchEvent(evt);
И тогда мне пришел гениальный по своей простоте ход. Я просто вызываю метод click у поля:
function call_1s(event) { document.body.click(); } <div onclick="call_1s(arguments[0])">TEST</div>
Для проверки я создаю div с текстом TEST, при клике на котором формируется виртуальный клик.

И в поле ввода, содержащего HTML-документ вызывается сначала мой виртуальный клик, потом уже реальный клик по div TEST.
Понятно, что клик можно вызывать не только у body, но и у любого другого элемента, например у скрытого div и считывать его содержимое или тег value.
В общем такой простой и незамысловатый способ позволяет легко организовать обратную связь от поля браузера в 1С.
Я использую таким образом, что когда узел дерева сворачивается, извещаю об этом 1С, она запоминает состояние узла — свернутое или развернутое.
Кстати, чтобы понять, работает код или нет, я после каждой строки вставлял alert с номерами 1, 2, 3, 4…
Таким образом я понимал, на какой строке спотыкался JS. Можно было, конечно, catch использовать для ловли ошибок, но лень вспоминать его правила.

Вызывать события чтобы получить данные это как лечить зубы с помощью проктолога
а какие другие варианты предлагаются? Обработчик ожидания? он подвешивает клиентскую часть.
Нет, если данные нужно передать в 1С для мгновенной реакции на них, то onclick — самое оно.
Чтобы получить данные объекта нужна ссылка на объект. Никаких виртуальных событий не нужно
давайте более конкретно, чтобы мы разговаривали об одном и том же, а не о сферических конях в вакууме.
вот есть поле HTML-документа.
Оно неким образом отображает данные из базы.
Например поле «Комментарий» объекта Номенклатуры в поле INPUT.
Когда пользователь меняет текст в этом поле INPUT, нужно сразу же (условно) отразить это изменение в объекте базы.
Ваши действия с помощью «ссылки на объект»?
а я при завершении ввода вызываю onclick и сообщаю, что поменялось.
1С считывает данные из поля ввода и делает, что нужно.
Значит происходит событие «при завершении ввода»? Вот его и надо использовать
в поле HTML браузера нет такого события, доступного 1с.
Его можно отловить на JS, но нужно как-то сообщить 1С, что оно случилось.
Автору явно не хватает умения донести мысль.
я программист, а не доносчик. Но я рад, что вы разобрались.
Ты не программист, к слову, идоносчик стукачок