Логи в javascript экшене

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
255
Баллы
63
Подскажите как вывести из кубика яваскрипт сообщение по типу как для сишарпа:

project.SendToLog("Сообщение", ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, true, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Green);

Через ретурн они:
а. С приставкой "Выполнение JavaScript Результат:"
б. Не цветные.

Любой костыль, только без дополнительных кубиков. Сейчас юзаю через document.title, но это 1. плюс действие на его чтение, 2. плюс цикл до нужного лога.
 

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
255
Баллы
63
Очень нужно парни, наверняка есть решение...
 

Carty

Client
Регистрация
16.06.2021
Сообщения
39
Благодарностей
68
Баллы
18
Нуу разве что если попытаться исполнить такие костыли:

Разово на странице выполнить такой js:
JavaScript:
window.sendToLogMessages = [];

window.sendToLog = function(message) {
    window.sendToLogMessages.push(message);
}
Запустить асинхронную таску, которая будет читать все сообщения из массива:
C#:
var cts = new CancellationTokenSource();
var t = Task.Run(() =>
{
    while (!cts.Token.IsCancellationRequested)
    {
        try
        {
            var message = instance.ActiveTab.MainDocument.EvaluateScript("return window.sendToLogMessages.pop();");
            if (!string.IsNullOrEmpty(message))
                project.SendInfoToLog(message);
           
            Task.Delay(100, cts.Token);
        }
        catch
        {
            return;
        }
    }
});

instance.ActiveTab.MainDocument.EvaluateScript("window.sendToLog('123123');");

Thread.Sleep(1000);

cts.Cancel();
t.GetAwaiter().GetResult();
CancellationTokenSource здесь для корректного завершения таски в нужный момент. Не уверен также, что такой код будет адекватно работать, если запускать таску глобально на весь шаблон.
 
  • Спасибо
Реакции: Wide и volody00

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
255
Баллы
63
Нуу разве что если попытаться исполнить такие костыли:

Разово на странице выполнить такой js:
JavaScript:
window.sendToLogMessages = [];

window.sendToLog = function(message) {
    window.sendToLogMessages.push(message);
}
Запустить асинхронную таску, которая будет читать все сообщения из массива:
C#:
var cts = new CancellationTokenSource();
var t = Task.Run(() =>
{
    while (!cts.Token.IsCancellationRequested)
    {
        try
        {
            var message = instance.ActiveTab.MainDocument.EvaluateScript("return window.sendToLogMessages.pop();");
            if (!string.IsNullOrEmpty(message))
                project.SendInfoToLog(message);
          
            Task.Delay(100, cts.Token);
        }
        catch
        {
            return;
        }
    }
});

instance.ActiveTab.MainDocument.EvaluateScript("window.sendToLog('123123');");

Thread.Sleep(1000);

cts.Cancel();
t.GetAwaiter().GetResult();
CancellationTokenSource здесь для корректного завершения таски в нужный момент. Не уверен также, что такой код будет адекватно работать, если запускать таску глобально на весь шаблон.
Благодарю тебя добрый человек, проверю отпишусь обязательно!
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)