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

  • Автор темы Автор темы Wide
  • Дата начала Дата начала

Wide

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

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

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

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

Разово на странице выполнить такой 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 здесь для корректного завершения таски в нужный момент. Не уверен также, что такой код будет адекватно работать, если запускать таску глобально на весь шаблон.
 
  • Спасибо
Реакции: BAZAg, Wide и volody00
Нуу разве что если попытаться исполнить такие костыли:

Разово на странице выполнить такой 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 здесь для корректного завершения таски в нужный момент. Не уверен также, что такой код будет адекватно работать, если запускать таску глобально на весь шаблон.
Благодарю тебя добрый человек, проверю отпишусь обязательно!
 
Нуу разве что если попытаться исполнить такие костыли:

Разово на странице выполнить такой 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 здесь для корректного завершения таски в нужный момент. Не уверен также, что такой код будет адекватно работать, если запускать таску глобально на весь шаблон.
Спасибо за сообщение!
Помог!

Кстати, если токен создавать так - то это укажет подождать 120 секунд и тогда вызвется Cancel автоматически.
C#:
Развернуть Свернуть Копировать
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(120)); // ждем 120 секунд

Это мне было полезно, когда решал проблему с извлечением данных с трафика.
Вдруг кому надо - ссылка на тему тут.
 

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