|
Вызов методов языка JavaScript из кода 1С. | ☑ | ||
---|---|---|---|---|
0
Alexxxxxx
15.12.17
✎
13:31
|
Доброго времени суток!
Платформа 8.3.10.2561 IE11 Есть внешняя обработка. На форме обработки "Поле HTML документа". В процедуре "ПриСозданииНаСервере" вставляется код HTML. Коде HTML есть функция и кнопка. Как вызвать функцию JavaScript из кода 1С. Eval не работает. Спасибо. |
|||
1
Alexxxxxx
15.12.17
✎
13:33
|
P.S. Кнопка в данном случае не привязана к функции, она просто создаётся и всё.
|
|||
2
VS-1976
15.12.17
✎
13:39
|
(0) 1С использует урезанный функционал ослика. Грузи по com самого ослика и там вызывай что нужно.
|
|||
3
Alexxxxxx
15.12.17
✎
13:41
|
(2)Что Вы подразумеваете под "ослик"?)
|
|||
4
catena
15.12.17
✎
13:42
|
(3)ie-ie-ie
|
|||
5
Asmody
15.12.17
✎
13:50
|
(0) как функция объявлена?
|
|||
6
Alexxxxxx
15.12.17
✎
13:51
|
(5)
Функция ПолучитьТекстHTML() Текст = " |<html> |<head> |<title>Мой заголовок</title> |<meta http-equiv=""X-UA-Compatible"" content=""IE=11"" /> |</head> |<body> |<script type=""text/javascript""> | |// Для вызова из 1С |function zako() |{ | return alert( 'привет, мир!' ); |}; | |</script> | |<!-- А это вызов функции 1С из скрипта /> --> |<input type = ""button"" onclick = ""Message1C('пока, мир!')"" value = ""1С"" /> | |</body> |</html> |"; Возврат Текст; КонецФункции |
|||
7
Asmody
15.12.17
✎
13:55
|
js-функцию Надо объявить как свойство какой-то глобальной js-переменной. тогда ее можно будет вызвать из 1С через object.
В обратную сторону надо в js кидать события документа, которые ловить в обработчике ПоляHTMLДокумента |
|||
8
Asmody
15.12.17
✎
13:56
|
(2) по отношению к ie11 и 8.3 это не верно
|
|||
9
Адинэснег
15.12.17
✎
13:56
|
(3) как тебя угораздило то в js
|
|||
10
Alexxxxxx
15.12.17
✎
14:04
|
(9)как то так занесла нелёгкая.)
|
|||
11
sitex
naïve
15.12.17
✎
14:04
|
(0) А Какая задача то стоит и того? УФ?
|
|||
12
Alexxxxxx
15.12.17
✎
14:04
|
(7) на почту, что в профиле, я Вам написал.
|
|||
13
Alexxxxxx
15.12.17
✎
14:06
|
Задача следующая - есть некоторая программа которая пишет в тхт данные. Забрать эти данные и вывести в "Поле HTML документа".
|
|||
14
Сергиус
15.12.17
✎
14:07
|
(0)Закидываешь в переменную, которая связана с полем HTML на форме текст функции, к примеру:
|
|||
15
Alexxxxxx
15.12.17
✎
14:08
|
Cредствами js, потому что там есть sleep.
|
|||
16
dinn
15.12.17
✎
14:08
|
Буквально вчера готовил пример. см СоздатьКнопки()
Процедура ПриОткрытии() Текст = " |<HTML> |<BODY style='background-color:#FCFAEB' scroll = 'no'> | |<div id='container'></div> //|<button id='interactionButton' style='display: none'>Кнопка взаимодействия</button> | |<script type=""text/javascript""> |function createButtons(buttonsArray) |{ |var buttonsCount = buttonsArray.Количество(); // Доступны методы и свойства массива 1С |for(var i = 0; i < buttonsCount; i++) | { | var ПараметрыКнопки = buttonsArray.Получить(i); | | var btn = document.createElement('div'); | btn.id = ПараметрыКнопки.ИмяКоманды; | btn.innerText = ПараметрыКнопки.Заголовок; | btn.style.fontSize = ПараметрыКнопки.РазмерТекста; | btn.style.color = ПараметрыКнопки.ЦветТекста; | btn.style.background = '#eee'; | btn.style.color = '#088'; | btn.style.textDecoration = 'none'; | btn.style.display = 'block'; | btn.style.width = '90px'; // | btn.style.text-align = 'center'; | btn.style.margin = '20px auto'; | btn.style.padding = '10px 10px'; | btn.style.transition = 'all 0.3s'; | | container.appendChild(btn); | } |}; |</script> |</BODY> |</HTML> |"; ЭтаФорма.ЭлементыФормы.ДокументHTML.УстановитьТекст(Текст); КонецПроцедуры Процедура СоздатьКнопки() МассивКнопок = Новый Массив; Для Сч = 1 По 2 Цикл СтруктураКнопки = Новый Структура; СтруктураКнопки.Вставить("Заголовок", "Кнопка " + Сч); СтруктураКнопки.Вставить("ИмяКоманды", "Кнопка" + Сч); СтруктураКнопки.Вставить("РазмерТекста", 15); СтруктураКнопки.Вставить("ЦветТекста", ""); МассивКнопок.Добавить(СтруктураКнопки); КонецЦикла; // ЭлементыФормы.ПолеHTMLДокумента1.Документ.parentWindow.createButtons(МассивКнопок); Документ = ЭтаФорма.ЭлементыФормы.ДокументHTML.Документ; //Документ.parentWindow.zako(ЭтаФорма); Документ.parentWindow.createButtons(МассивКнопок); КонецПроцедуры Процедура ВызватьСкрипт(Команда) Документ = ЭтаФорма.ЭлементыФормы.ДокументHTML.Документ; Документ.parentWindow.zako(ЭтаФорма); КонецПроцедуры Процедура ДокументHTMLДокументСформирован(Элемент) Если Не КнопкиСозданы Тогда // ВызватьСкрипт(Неопределено); КнопкиСозданы = Истина; СоздатьКнопки(); КонецЕсли; КонецПроцедуры Процедура ДокументHTMLonclick(Элемент, pEvtObj) Сообщить(pEvtObj.srcElement.id); КонецПроцедуры |
|||
17
sitex
naïve
15.12.17
✎
14:11
|
(13) Ну собрать данные можно и просто в макете и вывести их потом в поле HTML. Скинул бы пример но почты у вас нет в профиле.
|
|||
18
Alexxxxxx
15.12.17
✎
14:13
|
текст = "
| <!DO C TYPE HTML> |<html> |<head> | <script type=""text/javascript""> | window.onload = function () { | | var dps = [{x: 1, y: 10}, {x: 2, y: 13}, {x: 3, y: 18}, {x: 4, y: 20}, {x: 5, y: 17},{x: 6, y: 10}, {x: 7, y: 13}, {x: 8, y: 18}, {x: 9, y: 20}, {x: 10, y: 17}]; //dataPoints. | | var chart = new CanvasJS.Chart(""chartContainer"",{ | title :{ | text: ""Live Data"" | }, | axisX: { | title: ""Axis X Title"" | }, | axisY: { | title: ""Units"" | }, | data: [{ | type: ""line"", | dataPoints : dps | }] | }); | | chart.render(); | var xVal = dps.length + 1; | var yVal = 15; | var updateInterval = 1; | | var updateChart = function () { | | | yVal = yVal + Math.round(5 + Math.random() *(-5-5)); | dps.push({x: xVal,y: yVal}); | | xVal++; | //if (dps.length > 10 ) | //{ | // dps.shift(); | //} | | chart.render(); | | // update chart after specified time. | |}; | |setInterval(function(){updateChart()}, updateInterval); |} |</script> |<script type=""text/javascript"" src=""canvasjs.min.js""></script> |</head> |<body> | <div id=""chartContainer"" style=""height: 300px; width: 100%;""></div> |</body> |</html>"; |
|||
19
Alexxxxxx
15.12.17
✎
14:16
|
(17)Открыл видимость почты.
Выше макет рабочего кода построения движущегося графика при помощи canvasjs. |
|||
20
Сергиус
15.12.17
✎
14:20
|
+(14)
JSCode = |function SetForm1c(Form1c) |{ | xForm1C = Form1c; |}"; Создаешь на форме 1с кнопку, и в ее коде делаешь вызов по типу: Элементы.ПолеHTML.Документ.parentWindow.SetForm1c(ЭтаФорма); |
|||
21
sitex
naïve
15.12.17
✎
14:30
|
(19) После 1000 в графике IE умирает на УФ. (по крайне мере у меня )
|
|||
22
Alexxxxxx
15.12.17
✎
14:32
|
(21)да, поэтому я от этого отказался.
|
|||
23
sitex
naïve
15.12.17
✎
14:34
|
(22) Отправил.
|
|||
24
Alexxxxxx
15.12.17
✎
14:35
|
(16) Документ.parentWindow.zako(ЭтаФорма) выдаёт ошибку, что метод zako не обнаружен.
|
|||
25
Alexxxxxx
15.12.17
✎
14:36
|
(23)Спасибо. Сейчас гляну.
|
|||
26
Alexxxxxx
15.12.17
✎
14:39
|
(23) у меня ничего не происходит при открытии.
|
|||
27
sitex
naïve
15.12.17
✎
14:41
|
(26) Должен быть доступ в Инет для canvasjs.min.js
|
|||
28
dinn
15.12.17
✎
14:45
|
(24) а она вам не нужна, см. Документ.parentWindow.createButtons(МассивКнопок);
|
|||
29
Alexxxxxx
15.12.17
✎
14:45
|
Погуглив два дня, есть информация что до IE9 методы вызова eval или Элементы.ДокументHTML.Документ.МояФункция() работали. Выше IE9 вызов функций, как я понимаю, происходит через создание невидимых кнопок на HTML.
|
|||
30
Alexxxxxx
15.12.17
✎
15:14
|
(28) {ВнешняяОбработка.ТестХТМЛ.Форма.Форма.Форма(67)}: Метод объекта не обнаружен (createButtons)
Документ.parentWindow.createButtons(МассивКнопок); |
|||
31
Alexxxxxx
15.12.17
✎
15:20
|
Источник по (29) _http://catalog.mista.ru/public/347442/
|
|||
32
Alexxxxxx
15.12.17
✎
15:38
|
Всё оказалось очень банально просто и всё заработало!
В IE(он же ослик, он же ie-ie-ie) нужно было настроить параметры безопасности. Спасибо всем. За наводку отдельное спасибо sitex. |
|||
33
trdm
15.12.17
✎
16:07
|
Есть софт, который отрисовывает графики в картинку, нарисовал-забрал.
|
|||
34
trdm
15.12.17
✎
16:10
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |