Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > script injection в webbrowser


Автор: draiv 15.4.2009, 11:58
Подскажите как правильно вставить свой скрипт в страницу загружаемую webbrowser ом.
Пробую так - на DocumentCompleted меняю DocumentText так:
wb1.DocumentText = wb1.DocumentText.Replace("</head>", @"<script>alert('asd')</script></head>");

Добавлено через 10 минут и 47 секунд
черт - послал нечаянно преждевременно

Добавлено через 11 минут и 2 секунды
Подскажите как правильно вставить свой скрипт в страницу загружаемую webbrowser ом.

Пробую так - на DocumentCompleted меняю DocumentText так:
wb1.DocumentText = wb1.DocumentText.Replace("</head>", @"<script>alert('asd')</script></head>"); 
при этом мой скрипт срабатывает, но не работают другие скрипты, имеющиеся на странице, родгружаемые по src. 
Я так предполагаю -изза того, что после моего изменения DocumentText опять вызывается метод Navigate и контролу передается мой измененный html и при этом наверно все пути в src скриптов берутся не относительно сайта что я грузил а относительно моей машины - поэт не находятся.
Подскажите так это или нет и как нужно вставлять script, чтоб при этом не нарушалась работа уже имеющихся?
(еще желательно чтоб эта вставка делалась до DocumentCompleted)

Автор: diadiavova 15.4.2009, 13:37
Вставить скрипт можно так
Код


        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            HtmlDocument doc = webBrowser1.Document;
            HtmlElement script = doc.CreateElement("script");
            script.SetAttribute("type","text/javascript" );
            script.SetAttribute("id", "myScript");
            HtmlElement btn = doc.CreateElement("input");
            btn.SetAttribute("type", "button");
            btn.SetAttribute("value", "show");
            btn.SetAttribute("id", "btn1");
            doc.Body.AppendChild(script);
            doc.Body.AppendChild(btn);
            
            //Первый вариант

            object uScript = doc.DomDocument.GetType().GetMethod("getElementById" )
                .Invoke(doc.DomDocument,new object[]{"myScript"});
            uScript.GetType().GetProperty("text")
                .SetValue(uScript,"function hellow1(){alert('Hellow from page!')}btn1.onclick=hellow1;",null);

            //Второй вариант
            //btn.AttachEventHandler("onclick", hellow2);
            
        }

        void hellow2(object sender,EventArgs e)
        {
            MessageBox.Show("Hellow from code!");
        }



Здесь в документ вставляется кнопка, далее : в первом варианте вставляется скрипт с функцией  и привязкой её к событию click этой кнопки. Во втором варианте клик кнопки обрабатывается в коде C#.

Автор: draiv 16.4.2009, 12:23
Спасибо, теперь разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)