Вызов javascript функций из 1с(управляемая форма)
Здравствуйте, есть поле html документа на форме, в нем определены несколько javascript функций.
Подскажите как можно вызвать эти функции из 1с.
ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.eval
не подходит т.к. необходимо передавать массивы в качастве параметров, а если напрямую к функции обращаться
ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.MyFunction(m);
то появляется ошибка "Метод объекта не обнаружен".
Подскажите как можно вызвать эти функции из 1с.
ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.eval
не подходит т.к. необходимо передавать массивы в качастве параметров, а если напрямую к функции обращаться
ЭтаФорма.Элементы.HTMLПоле.Документ.parentWindow.MyFunction(m);
то появляется ошибка "Метод объекта не обнаружен".
По теме из базы знаний
- Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии
- HTML5 в ПолеHTMLДокумента на Управляемой форме - fireEvent в действии
- Javascript и 1С. Кросс-платформенное взаимодействие
- Игра "Арканоид" (Javascript фреймворк Phaser). HTML 5 Сanvas + WebGL. Управляемые формы (ТОНКИЙ, ТОЛСТЫЙ клиент), Обычные формы
- Очередная попытка взаимодействия с JavaScript из клиента 1С. Расширение "Подключаемые Скрипты"
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(9) glime, в моем случае не работало т.к. я обращался к функции из обработчика ПриСозданииНаСервере вроде, сейчас уж точно не помню. Но вобщем в тот момент когда я к функции HTML поля обращался, поле ещё не было создано, потому и появлялась ошибка.
Передавал массивы добавляя текст кода к макету.
Как-то так:
Передавал массивы добавляя текст кода к макету.
Как-то так:
Пока ВыборкаТЧ.Следующий() Цикл
jscode = jscode + ПолучитьКодИнициализацииЭлемента(id+ВыборкаТЧ.НомерЭлемента, ВыборкаТЧ.СтрокаКоординат, Цвет, ЦветФормы,ИсторияЭлемента);
КонецЦикла;
ХТМЛШаблон = СтрЗаменить(ХТМЛШаблон, "//drawing", jscode);
когда-то так работало
Наверное неправильно понял суть темы...
Передать массив в параметр функции js можно попробовать так:
ЭтаФорма.Элементы.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));
Показать
Странно, что не работает
ЭтаФорма.Элементы.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 работало.
ЭтаФорма.Элементы.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 работало.
Всем добрый день
пример рабочего кода
<!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>
пример рабочего кода
<!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>
(13) Спасибо, так работает, но теперь другой момент... ие делает что надо, но не совсем.
У меня на форме поле HTMLдокумента и в нем карта гугл.
ИЕ почему-то карту не выводит и скрипт потому выдает ошибку, но уже не там...
а мозилли карту рисует, но дает вообще левую ошибку:(
А так тема помогла, спасибо.
У меня на форме поле HTMLдокумента и в нем карта гугл.
ИЕ почему-то карту не выводит и скрипт потому выдает ошибку, но уже не там...
а мозилли карту рисует, но дает вообще левую ошибку:(
А так тема помогла, спасибо.
Для 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");
КонецЕсли;
КонецПроцедуры
Показать