JavaScript в поле HTML документа. Прямой вызов функций и с помощью eval #659263


#0 by Elizir
Доброго дня. Возникла такая проблема, а точнее вопросы. На форме есть поле HTML документа, в котором присутствуют пара JavaScript функций. Пытаюсь наладить связь между ними и 1С, форум уже прошелестил, осталось следующей непонятное: 1) Вызвать функцию JS можно двумя способами, так: и так: Элементы.ПолеHTMLДокумента.Документ.parentWindow.eval("testJS"); Вызываемая функция должна возвращать массив, например. Так вот, второй вариант возвращает массив в виде COM-объекта (правда ключи строковые), а первый возвращает просто COM-объект без элементов (есть подозрение, что он ничего не возвращает, а в переменную записывается сама функция). Собственно, отсюда вопрос, где подробней можно узнать о разнице в вызовах? Ведь первый вариант предпочтителен, т.к. позволяет передавать не только строковой параметр в функцию. 2) Из предыдущего вытекает еще любопытство. Обратная ситуация, передаем массив в функцию JS (прямым вызовом, разумеется). Предполагал, что ошибка будет (откуда JS знать тип массива 1С), но нет, передалось, более того, в JS с ним можно работать, используя функции 1С, т.е. Добавить, Получить и т.д., не работает только индексация. Как так? 3) И, наконец, самое загадочное - вызов функций 1С из JS. Для обычных форм советовали использовать в JS fireEvent, вызвав им событие, которое может поймать 1С. Но на управляемых формах есть только "ПриИзменении", "ПриНажатии" и "ДокументСформирован". Как тут быть? Не очень надеюсь, но, конечно, хотелось бы узнать литературу, в которой это было хоть как-то затронуто. :)
#1 by Asmody
почитать это, пожалуй, только в msdn, про компонент WebBrowser, да и то не всё. Ибо то, как в 1ске внутре реализована работа с ним знают только в 1С,а остальные догадывается. Методом тыка
#2 by vde69
eval - потенциально опасная функция, многими "защитниками" режется
#3 by Elizir
Нда, обидно. Для передачи данных туда-сюда еще глобальные переменные могут сгодиться, но некрасиво... В любом случае, третий вопрос остается открытым, не понимаю, почему из управляемых форм вырезали обработчики событий html?
#4 by sikuda
onclick="testJS" написать в HTML. Или при загрузке
#5 by Elizir
Это привяжет функцию JS к событию JS. А как его в 1С-то поймать на управляемой форме?
#6 by Elizir
Видимо, никак. :) Выход, получается, один. Поскольку управляемая форма может отлавливать нажатие, т.е. onclick, это событие, вызываемое fireEvent'ом - единственная обратная связь от JS к 1С. Остается только узнать, кто, собственно, нажимал, пользователь или JS. Всем спасибо!
#7 by vde69
надо в 1с вызвать ПодключитьОбработчик(обработчикВМодуле1с) будет работать в толстом клиенте, в веб и тонком - не проверял
#8 by orefkov
Скорее всего первый вызов тебе возвращает javascript'овский массив, который Array. И с ним одинэсина (да и не только она) не может работать. Я делал так: А в самом скрипте: function testJS(res) {    res.Add    res.Add }
#9 by orefkov
По второму вопросу. Так как с 1Ской можно работать через COM, ее движок умеет при передаче объектов 1С через COM "оборачивать" их в COM-объект. И обратно соответственно. Даже функции такая торчат наружу из core82.dll: valueToVariant и variantToValue. В скриптах к снегопату очень активно используются 1Сные объекты - от ТаблицЗначений до Метаданные.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С