Предположим, программа-полуавтомат обходит ряд сайтов с целью анализа их информации.
Зачастую в такой программе возникает необходимость добавления кода в загруженную страницу и его выполнение.
Простейший пример - установка фокуса в элемент формы.
Программа (обычная Windows-форма) для просмотра веб-страниц использует стандартный компонент WebBrowser.
C#-класс формы имеет примерно следущий вид:
public partial class Form1 : Form
{
// объявление компонента
private System.Windows.Forms.WebBrowser webBrowser1;
// вставляемый код
String sJS = "function sayHello() { alert('Hello!') }";
// событие DocumentCompleted может происходит несколько раз
// (например, страница имеет вложенные файлы стилей),
// поэтому для определения окончания загрузки страницы используем счетчик
int navigationCounter = 0;
public Form1()
{
// инициализация элементов формы, в том числе webBrowser1
InitializeComponent();
...
// добавим обработчики событий
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentLoaded);
webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(IEBrowser_Navigating);
}
// после инициализации webBrowser1 можно использовать для навигации, например при нажатии кнопки
private void button1_Click(object sender, EventArgs e)
{
navigationCounter = 0;
webBrowser1.Navigate("http://ya.ru");
}
// загрузка документа началась
private void IEBrowser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
navigationCounter++;
}
//загрузка документа закончилась
private void DocumentLoaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
navigationCounter--;
if (navigationCounter > 0)
{
return;
}
// документ загружен полностью
// найти тег 'head'
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
// создать новый элемент типа скрипт
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
scriptEl.SetAttribute("type", "text/javascript");
scriptEl.SetAttribute("text", sJS);
// добавить скрипт в тег 'head' html-документа
head.AppendChild(scriptEl);
// выполнить скрипт
webBrowser1.Document.InvokeScript("sayHello");
}
}