Метод объекта Document. Выполняет 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;
})()
");