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


1С:Предприятие ::

Метки: 

JS в 1С

Я
   golem14
 
25.07.18 - 08:13
Платформа 8.3.13.1198.
Объект.HTML = "
|<!DOCTYPE HTML>
|<html>
|
|<head>
|  <!-- Тег meta для указания кодировки -->
|  <meta charset=""utf-8"">
|</head>
|
|<body>
|
|  <p>Начало документа...</p>
|  <script>
|   document.write('qwerty');
|  </script>
|
|  <p>...Конец документа</p>
|
|</body>
|
|</html>";


javascript срабатывает два раза, т.е. в поле появляется qwerty qwerty.
Почему и что с этим делать?
 
  Рекламное место пустует
   Ненавижу 1С
 
1 - 25.07.18 - 08:15
фиг знает как ты это запуускаешь
   golem14
 
2 - 25.07.18 - 08:16
(1) в Поле HTML документа
   Малыш Джон
 
3 - 25.07.18 - 08:28
(2) тебе мягко намекают, что самого скрипта недостаточно, чтобы понять где ошибка.

ты на какое-то действие выполнение скрипта вешаешь?
   golem14
 
4 - 25.07.18 - 08:31
(3) я пробовал ПриСозданииНаСервере, ПриОткрытии, просто на кнопку повесить. Во всех случаях javascript срабатывает два раза.
уже обсуждалось v8: v8: javascript в поле html-документа срабатывает 2 раза
но решения там нет
   sitex
 
5 - 25.07.18 - 08:32
(0) не совсем понял зачем скрипт в тело сувать?
   golem14
 
6 - 25.07.18 - 08:37
(5) А куда? оно так работает. вот простой пример HelloWorld 
<!DOCTYPE HTML>
<html>

<head>
  <!-- Тег meta для указания кодировки -->
  <meta charset="utf-8">
</head>

<body>

  <p>Начало документа...</p>
  <script>
    alert( 'Привет, Мир!' );
  </script>

  <p>...Конец документа</p>

</body>

</html>
   sitex
 
7 - 25.07.18 - 08:38
(0) блок <head> </head> , и от туда вызывай
   golem14
 
8 - 25.07.18 - 08:39
этот пример тоже выводит "Привет, Мир!" два раза (в 1С).
   sitex
 
9 - 25.07.18 - 08:41
(8) Итого что опиши подробной что ты хочешь сделать.
   sitex
 
10 - 25.07.18 - 08:45
(8) <body> добавляй свои кнопки и что угодно < /body>
, в <script> создавай функции и вешай их свои кнопки , клики мыши и т.д.  </script> все просто.
 
  Рекламное место пустует
   novichok79
 
11 - 25.07.18 - 08:46
а может функцию сделать в JS и просто вызывать ее насильно...
что-то типа parentWindow.eval("HelloWorldYopta()");
   golem14
 
12 - 25.07.18 - 08:50
(7) &НаКлиенте
Процедура Команда1(Команда)
     Объект.HTML = "
|<html>
|<head>
|  <script>
|   document.write('qwerty');
|  </script>
|</head>
|<body>
|
|</body>
|</html>";
КонецПроцедуры



выводит - qwerty qwerty

Объясню подробней: в пустой конфигурации создал документ, ему реквизит HTML (тип строка с неограниченной длиной). Вывел реквизит на форму, установил вид "Поле HTML документа".
Добавил вышеприведенную команду.
должно выводить - qwerty 

а выводит - qwerty qwerty , т.е. скрипт выполняется дважды.
   golem14
 
13 - 25.07.18 - 08:52
(11) Хотелось бы чтобы оно просто работало, но видимо так и нужно делать как вы советуете. Есть готовый простой пример?
   sitex
 
14 - 25.07.18 - 08:53
(12) &НаСервере формируй свой текст html и Процедуре ПриСозданииНаСервере присваивай своему реквизиту-  этого достаточно.
   golem14
 
15 - 25.07.18 - 08:54
(10) в теории все просто и красиво, на практике вот оно вот так вот и работает.
   golem14
 
16 - 25.07.18 - 08:54
(14) так и делаю, выводит два раза
   Малыш Джон
 
17 - 25.07.18 - 08:55
(11) начиная с какой-то версии порезали eval()
   novichok79
 
18 - 25.07.18 - 08:56
(17) ну тогда печалько...
   novichok79
 
19 - 25.07.18 - 09:00
вот недавно как раз баловался...

<!DOCTYPE html>
<html>
<head>
    <title>Font Size Definition</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=9" />
    <script>
    function GetFontSize1C(TextParam, FontDefinition)
    {
        var myCanvas = document.getElementById("myCanvas");
        var myCanvas2D = myCanvas.getContext("2d");
        myCanvas2D.font = FontDefinition;
        return myCanvas2D.measureText(TextParam).width;
    }

    function ExecCommand()
    {
        code = document.getElementById("ExtCommand").innerHTML;
        res = "" + eval(code);
        document.getElementById("BufferData").innerHTML = res;
    }
    </script>
</head>
<body>
    <canvas id="myCanvas" width="320" height="120" style="border:2px solid #d3d3d3;">Ваш браузер не поддерживает тэг HTML5 canvas.</canvas>
    <input type=button style="display:none" id="SendEvent" onclick = "ExecCommand()" />
    <div id="ExtCommand" style="display:none">extcommand</div>
    <div id="EventName" style="display:none">js_event</div>
    <div id="BufferData" style="display:none">js_result</div>
</body>
</html>
   golem14
 
20 - 25.07.18 - 09:01
здесь dt выгрузка моего простого примера https://yadi.sk/d/Cc9U85Ok3ZYQkG
   novichok79
 
21 - 25.07.18 - 09:02
&НаКлиенте
Процедура ОпределитьШиринуНадписи(Команда)
    
    Объект.ШиринаТекста = ОпределитьШиринуНадписиНаКлиенте();

КонецПроцедуры

&НаКлиенте
Функция ОпределитьШиринуНадписиНаКлиенте()

    ТипЧисло100 = Новый ОписаниеТипов("Число",
    Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Любой));
    
    Элементы.ПолеHTMLДокумента.Документ.getElementById("ExtCommand").innerHTML = 
    ПодставитьПараметрыВСтроку("GetFontSize1C(""%1"", ""%2"")", 
    Объект.ТекстНадписи, Объект.ОпределениеШрифта);

    КнопкаSendEvent = Элементы.ПолеHTMLДокумента.Документ.getElementById("SendEvent");
    РезультатВыполненияКоманды = КнопкаSendEvent.fireEvent("onclick");
    
    Если РезультатВыполненияКоманды Тогда

        РезультатФункции = 
        ТипЧисло100.ПривестиЗначение(
        Элементы.ПолеHTMLДокумента.Документ.getElementById("BufferData").innerHTML);
        
    Иначе РезультатФункции = 0;
    КонецЕсли;
    
    Если ТипЗнч(РезультатФункции) <> Тип("Число") Тогда РезультатФункции = 0;
    КонецЕсли;

    Возврат РезультатФункции;
    
КонецФункции
   novichok79
 
22 - 25.07.18 - 09:03
первое - это текст документа, второе - код обработки в 1С.
   sitex
 
23 - 25.07.18 - 09:10
(16) ну напиши так в теле <body onload=""document.write('qwerty')"" > выведет один раз
   sitex
 
24 - 25.07.18 - 09:15
либо в добавь <script>  window.onload = function () {
        document.write('qwerty');  

тоже должно вывести один раз
   golem14
 
25 - 25.07.18 - 09:19
(24) так работает да. эх костыли.
   sitex
 
26 - 25.07.18 - 09:21
(24) Этот вариант предпочтительней использовать. так ты хоть будешь контролировать что у тебя выводиться.



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