Метод объекта EvaluateScript. Выполняет JS-строку в контексте страницы, возвращает результат как string.

Сигнатура

string result = instance.ActiveTab.MainDocument.EvaluateScript(string script);

Полная форма с параметрами:

string result = instance.ActiveTab.MainDocument.EvaluateScript(script, throwException, altWay);

Главное правило — нужен return

EvaluateScript выполняет скрипт как тело функции. Без return всегда возвращается пустая строка.

// Вернёт пустую строку — нет return
instance.ActiveTab.MainDocument.EvaluateScript(
    "document.getElementById('input-text').value"
);
 
// Вернёт значение поля
string val = instance.ActiveTab.MainDocument.EvaluateScript(
    "return document.getElementById('input-text').value;"
);
project.SendInfoToLog(val);

Объекты — только через JSON.stringify

JS-объект приходит в C# как строка "[object Object]". Нужна сериализация.

string json = instance.ActiveTab.MainDocument.EvaluateScript(
    "return JSON.stringify({ value: document.getElementById('input-text').value });"
);
project.SendInfoToLog(json); // {"value":"текст"}

Действие без возврата значения

// return не нужен
instance.ActiveTab.MainDocument.EvaluateScript(
    "document.getElementById('input-text').value = 'привет';"
);

Параметры

  • throwException — если true, выбрасывает исключение при JS-ошибке. По умолчанию false — ошибки молча проглатываются, метод возвращает пустую строку
  • altWay — альтернативный движок выполнения. По умолчанию false

Что не работает

  • async/await — метод синхронный, Promise возвращает "[object Promise]"
  • return вне функции без обёртки — в строгом режиме ошибка. ZennoPoster принимает return на верхнем уровне, но при сложной логике лучше IIFE:
string r = instance.ActiveTab.MainDocument.EvaluateScript(@"
    (function() {
        var el = document.getElementById('input-text');
        if (!el) return 'not found';
        return el.value;
    })()
");