Вызов 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 360 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 360 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 360 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");
	КонецЕсли;
КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот