ФорумыТемы

Новое сообщение

Сообщения темы 'Инъекция javascript кода в html-страницу'

Фильтр:
содержит   Сортировка   

  

gliba 24.04.2010 15:31
Предположим, программа-полуавтомат обходит ряд сайтов с целью анализа их информации. 
Зачастую в такой программе возникает необходимость добавления кода в загруженную страницу и его выполнение. 
Простейший пример - установка фокуса в элемент формы.
Программа (обычная 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");
    }
}


  



Новое сообщение
 

Послать уведомление по e-mail

Продолжить


Авторизоваться через https://www.pvobr.ru
Логин
Пароль
Регистрация

Авторизоваться через соцсети
Наверх