Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Вызов методов языка JavaScript из кода 1С.

Вызов методов языка JavaScript из кода 1С.
Я
   Alexxxxxx
 
15.12.17 - 13:31
Доброго времени суток!

Платформа 8.3.10.2561
IE11
Есть внешняя обработка. На форме обработки "Поле HTML документа".
В процедуре "ПриСозданииНаСервере" вставляется код HTML.
Коде HTML есть функция и кнопка. Как вызвать функцию JavaScript из кода 1С. Eval не работает.

Спасибо.
 
 
   Alexxxxxx
 
1 - 15.12.17 - 13:33
P.S. Кнопка в данном случае не привязана к функции, она просто создаётся и всё.
   VS-1976
 
2 - 15.12.17 - 13:39
(0) 1С использует урезанный функционал ослика. Грузи по com самого ослика и там вызывай что нужно.
   Alexxxxxx
 
3 - 15.12.17 - 13:41
(2)Что Вы подразумеваете под "ослик"?)
   catena
 
4 - 15.12.17 - 13:42
(3)ie-ie-ie
   Asmody
 
5 - 15.12.17 - 13:50
(0) как функция объявлена?
   Alexxxxxx
 
6 - 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>
    |";    
    
    Возврат Текст;

КонецФункции
   Asmody
 
7 - 15.12.17 - 13:55
js-функцию Надо объявить как свойство какой-то глобальной js-переменной. тогда ее можно будет вызвать из 1С через object.
В обратную сторону надо в js кидать события документа, которые ловить в обработчике ПоляHTMLДокумента
   Asmody
 
8 - 15.12.17 - 13:56
(2) по отношению к ie11 и 8.3 это не верно
   Адинэснег
 
9 - 15.12.17 - 13:56
(3) как тебя угораздило то в js
   Alexxxxxx
 
10 - 15.12.17 - 14:04
(9)как то так занесла нелёгкая.)
 
 Рекламное место пустует
   sitex
 
11 - 15.12.17 - 14:04
(0) А Какая задача то стоит и того? УФ?
   Alexxxxxx
 
12 - 15.12.17 - 14:04
(7) на почту, что в профиле, я Вам написал.
   Alexxxxxx
 
13 - 15.12.17 - 14:06
Задача следующая - есть некоторая программа которая пишет в тхт данные. Забрать эти данные и вывести в "Поле HTML документа".
   Сергиус
 
14 - 15.12.17 - 14:07
(0)Закидываешь в переменную, которая связана с полем HTML на форме текст функции, к примеру:
   Alexxxxxx
 
15 - 15.12.17 - 14:08
Cредствами js, потому что там есть sleep.
   dinn
 
16 - 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);
    
КонецПроцедуры
   sitex
 
17 - 15.12.17 - 14:11
(13) Ну собрать данные можно и просто в макете и вывести их потом в поле HTML. Скинул бы пример но почты у вас нет в профиле.
   Alexxxxxx
 
18 - 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>";
   Alexxxxxx
 
19 - 15.12.17 - 14:16
(17)Открыл видимость почты.
Выше макет рабочего кода построения движущегося графика при помощи canvasjs.
   Сергиус
 
20 - 15.12.17 - 14:20
+(14)

JSCode = |function SetForm1c(Form1c)
     |{
     |  xForm1C = Form1c;
     |}"; 

Создаешь на форме 1с кнопку, и в ее коде делаешь вызов по типу:

Элементы.ПолеHTML.Документ.parentWindow.SetForm1c(ЭтаФорма);
   sitex
 
21 - 15.12.17 - 14:30
(19) После 1000 в графике IE умирает на УФ. (по крайне мере у меня )
   Alexxxxxx
 
22 - 15.12.17 - 14:32
(21)да, поэтому я от этого отказался.
   sitex
 
23 - 15.12.17 - 14:34
(22) Отправил.
   Alexxxxxx
 
24 - 15.12.17 - 14:35
(16) Документ.parentWindow.zako(ЭтаФорма) выдаёт ошибку, что метод zako не обнаружен.
   Alexxxxxx
 
25 - 15.12.17 - 14:36
(23)Спасибо. Сейчас гляну.
   Alexxxxxx
 
26 - 15.12.17 - 14:39
(23) у меня ничего не происходит при открытии.
   sitex
 
27 - 15.12.17 - 14:41
(26) Должен быть доступ в Инет для canvasjs.min.js
   dinn
 
28 - 15.12.17 - 14:45
(24) а она вам не нужна, см. Документ.parentWindow.createButtons(МассивКнопок);
   Alexxxxxx
 
29 - 15.12.17 - 14:45
Погуглив два дня, есть информация что до IE9 методы вызова eval или Элементы.ДокументHTML.Документ.МояФункция() работали. Выше IE9 вызов функций, как я понимаю, происходит через создание невидимых кнопок на HTML.
   Alexxxxxx
 
30 - 15.12.17 - 15:14
(28) {ВнешняяОбработка.ТестХТМЛ.Форма.Форма.Форма(67)}: Метод объекта не обнаружен (createButtons)
    Документ.parentWindow.createButtons(МассивКнопок);
   Alexxxxxx
 
31 - 15.12.17 - 15:20
   Alexxxxxx
 
32 - 15.12.17 - 15:38
Всё оказалось очень банально просто и всё заработало!
В IE(он же ослик, он же ie-ie-ie) нужно было настроить параметры безопасности. Спасибо всем. За наводку отдельное спасибо sitex.
   trdm
 
33 - 15.12.17 - 16:07
Есть софт, который отрисовывает графики в картинку, нарисовал-забрал.
 
 
   trdm
 
34 - 15.12.17 - 16:10


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует