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


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

JS в 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) Этот вариант предпочтительней использовать. так ты хоть будешь контролировать что у тебя выводиться.


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