Мы разрабатываем приложение, которое должно взаимодействовать с активным документом в IE.
Контекст: Приложение представляет собой настольное приложение на C #, .Net 3.5. Целью является выделение определенных текстовых элементов на веб-странице по запросу пользователя. Для этого нам нужно извлечь и интерпретировать элементы веб-страницы (необходимость возвращаемого значения), а затем воздействовать на них посредством другого вызова JS. Операции, которые должны быть выполнены на веб-странице, не все выполняются одновременно, поэтому мы должны получить своего рода «снимок» интересных текстовых элементов (мы делаем это в версии нашего приложения для Mac, возвращая строку, содержащую XML представление этих элементов).
В .Net мы успешно использовали метод IHTMLDocument2
execScript
для запуска некоторого JavaScript внутри активного документа IE, но мы не можем найти способ получить возвращаемое значение из вызова. На основании документа execScript возвращает константу успеха / неудачи выполнения, которая нам не нужна.
По сути, нам нужно загрузить JavaScript из текстового файла в строку, а затем отправить его в IE для выполнения. Затем нам нужно получить строку из вызванного скрипта.
Есть какие-нибудь подсказки, какие объекты использовать? Как приступить к получению этой функциональности?
Заранее спасибо!
Мой коллега нашел решение, основываясь на том, что сказал Алан Харфорд:
string jsToRun = "function myTest() { return document.title; } myTest();";
mshtml.IHTMLDocument2 myIHTMLDocument2 = GetSelectedIEWindow();
IE ie = IE.AttachToIE(Find.ByUrl(myIHTMLDocument2.url));
string jsReturn = ie.Eval(jsToRun);
jsReturn
содержит строковое значение, возвращаемое из myTest()
в JavaScript. Обратите внимание, что в скрипте нет return
до вызова функции myTest()
!