Вызов javascript функций из 1с(управляемая форма)

1. silvermilion 16.10.13 13:36 Сейчас в теме
Здравствуйте, есть поле html документа на форме, в нем определены несколько javascript функций.
Подскажите как можно вызвать эти функции из 1с.


ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.eval

не подходит т.к. необходимо передавать массивы в качастве параметров, а если напрямую к функции обращаться

ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.MyFunction(m);

то появляется ошибка "Метод объекта не обнаружен".
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
9. glime 106 16.03.15 13:27 Сейчас в теме
(1) silvermilion, случаем jQuery не используется в странице?
11. silvermilion 17.03.15 13:29 Сейчас в теме
(9) glime, в моем случае не работало т.к. я обращался к функции из обработчика ПриСозданииНаСервере вроде, сейчас уж точно не помню. Но вобщем в тот момент когда я к функции HTML поля обращался, поле ещё не было создано, потому и появлялась ошибка.

Передавал массивы добавляя текст кода к макету.

Как-то так:
	Пока ВыборкаТЧ.Следующий() Цикл
           jscode = jscode + ПолучитьКодИнициализацииЭлемента(id+ВыборкаТЧ.НомерЭлемента, ВыборкаТЧ.СтрокаКоординат, Цвет, ЦветФормы,ИсторияЭлемента);				
	КонецЦикла;
	ХТМЛШаблон = СтрЗаменить(ХТМЛШаблон, "//drawing", jscode);
2. t955938 11.02.14 13:38 Сейчас в теме
Хотел бы обновить данную тему. Прошло не мало времени с ее обсуждения.
3. vineda 11.02.14 14:10 Сейчас в теме
когда-то так работало
ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.eval("имя функции js")


Наверное неправильно понял суть темы...
Передать массив в параметр функции js можно попробовать так:
 ScrptCtrl = новый COMОбъект("MSScriptControl.ScriptControl");
 ScrptCtrl.Language="JScript"; 
 strJsCode="
    |function makeArr(){
        | var arr=[0,1,2,3,4];
        | return arr;
        |}";
 ScrptCtrl.AddCode(strJsCode); 
 comArr = ScrptCtrl.Eval(makeArr());

 ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.eval(someFunc(comArr));
Показать
4. t955938 11.02.14 14:14 Сейчас в теме
Спасибо за ответ.
А, в управляемой форме данный метод работает???
5. GusevNA 358 22.04.14 03:17 Сейчас в теме
Странно, что не работает

ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.MyFunction(m);

вроде всегда работало
другое дело, как потом обратиться к массиву

если массив небольшой, то можно его разложить в строку вида
"Array (1,2,3)"
Пример:
// получаем JavaScript-массив
хА = ЭтаФорма.Элементы.хНТМЛ.Документ.parentWindow.Eval ("Array (1,2,3)");
// вызываем JS-функцию с передачей массива
ЭтаФорма.Элементы.хНТМЛ.Документ.parentWindow.Debug1 (хА);

Функция JS
function Debug1 (param1)
{
alert (param1 [0]);
}
Проверено в 8.3.4.465, да и в последних релизах 8.2.x работало.
6. Arm12 09.02.15 18:19 Сейчас в теме
Большое спасибо за статью...
7. seller7 08.03.15 17:20 Сейчас в теме
Считаю целесообразным поднять тему. Для управляемых форм есть рабочий пример кода?
8. glime 106 16.03.15 13:26 Сейчас в теме
Всем добрый день
пример рабочего кода

<!DO CTYPE html>
<ht ml>
<head>
<met a charset="utf-8">
<st yle type="text/css">
#shape_prop{
display: none;
}

#output_xml{
height: 100px;
width: 900px;
}
</style>
<sc ript type="text/javascript">
function ShapePainter(){
alert("Тест")}
</sc ript>
<sc ript type="text/javascript">
function ShapePainter1(){
alert("Тест")}
</sc ript>
<sc ript type="text/javascript">
function ShapePainter2(){
alert("Тест")}
</sc ript>
<sc ript type="text/javascript">
function SetB(imagister){
alert(imagister);
}
</sc ript>

</head>
<body>
<sc ript type="text/javascript">
function SetB1(imagister){
alert(imagister);
}
</sc ript>
10. glime 106 16.03.15 13:34 Сейчас в теме
(8) + код проверен на релизе 1С:Предприятие 8.3 (8.3.6.1804) с измененным реестром в части поддержки HTML 5

ЭтаФорма.Элементы.хНТМЛ.Документ.parentWindow.SetB("111123");
12. zwitter 29.04.15 12:47 Сейчас в теме
Так работает и в 8.2 и в 8.3
хА = ЭтаФорма.Элементы.хНТМЛ.Документ.parentWindow.Eval("ИмяФункции([1,2,3])");
А как запустить в web клиенте? там eval не работает:(.
13. GusevNA 358 29.04.15 15:15 Сейчас в теме
(12) zwitter, попробуйте метод, описанный здесь:
http://infostart.ru/public/347442/
15. zwitter 30.04.15 15:14 Сейчас в теме
(13) Спасибо, так работает, но теперь другой момент... ие делает что надо, но не совсем.
У меня на форме поле HTMLдокумента и в нем карта гугл.
ИЕ почему-то карту не выводит и скрипт потому выдает ошибку, но уже не там...
а мозилли карту рисует, но дает вообще левую ошибку:(

А так тема помогла, спасибо.
16. OptimusMaximus 14.01.20 10:35 Сейчас в теме
все это работает только на клиенте как быть если надо сделать регламент на обмен с чем либо
так веть не напишешь
ЭтаФорма.Элементы.хНТМЛ.Документ.parentWindow
17. GusevNA 358 14.01.20 15:03 Сейчас в теме
(16) Обычно в таких случаях есть API через HTTP, то есть используется HTTPСоединение, а форма и ПолеHTMLДокумента не нужны
18. Abduazim5511 24.03.21 07:42 Сейчас в теме
Все вышеперечисленные методы не помогли одно и тот же ошибка. Метод объекта не обнаружен!
19. SlavaKron 24.03.21 07:48 Сейчас в теме
(18) Какая платформа? Приведите код скрипта.
20. Abduazim5511 24.03.21 08:12 Сейчас в теме
21. ZajacBo 09.06.23 09:47 Сейчас в теме
Для 8.3.20 в тонком клиенте

//все что после Документ. чувствительно к регистру
Элементы.ПолеХТМЛ.Документ.defaultView.parent.myFunction1("hello"); 
Элементы.ПолеХТМЛ.Документ.defaultView.parent.myFunction2("World");


при этом сама страница
<!DO CTYPE html> <!--указание обязательно -->
<ht ml>
  <head>
    <title>JS Test</title>  <!--обязательно должно быть по описанию HTML5 -->
   <!--скрипт именно в секции заголовка -->
  <sc ript type="text/javascript">  /*Без указания работает не везде*/
    function myFunction1(p1){
		alert(p1);
		retrun (0);
	};
	
	var myFunction2 = function(p1){
		return myFunction1(p1);
	};
       
  </sc ript>
  </head>
  <body>
  <h1>1C JS function call Test</h1>
  </body>
</html>
Показать


весь код формы обработки
&НаКлиенте
Процедура ПолеХТМЛДокументСформирован(Элемент)
	//Для предотвращения вызова до загрузки страницы
        Готов = истина; 
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ПолеХТМЛ = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет").ПолучитьТекст();
КонецПроцедуры

&НаКлиенте
Процедура Тест(Команда)
	если Готов тогда 
		Элементы.ПолеХТМЛ.Документ.defaultView.parent.myFunction1("hello"); 
		Элементы.ПолеХТМЛ.Документ.defaultView.parent.myFunction2("World");
	КонецЕсли;
КонецПроцедуры
Показать
Оставьте свое сообщение
Вакансии
Разработчик 1С
Ростов-на-Дону
зарплата от 230 000 руб. до 260 000 руб.
Полный день

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

Аналитик 1C
Самара
зарплата от 160 000 руб. до 180 000 руб.
Полный день

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

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