Отключить всплывающие окна Javascript при использовании Windows.Forms.Webbrowser.Navigate () - PullRequest
2 голосов
/ 25 апреля 2009

Хорошо, у меня очень неприятная проблема. Я анализирую веб-страницу, и мне нужно, чтобы она выполняла javascript, чтобы получить необходимую информацию.

Form f = new Form();
WebBrowser w = new WebBrowser();
w.Navigate(url);
f.Controls.Add(w);
f.ShowDialog();
HtmlElementCollection hc = w.Document.GetElementsByTagName("button");

Это работает, и я могу нормально получать элементы кнопки, но затем я получаю всплывающее окно каждый раз, когда я запускаю это. Очень надоедливый. Всплывающее окно основано на JavaScript, и мне нужно запустить Javascript, чтобы получить информацию об элементе кнопки. Вот скрипт для всплывающего окна.

<script>
var evilPopup = (getCookieVar("markOpen","PromoPop") == 1);
if (evilPopup != 1) 
{
    PromoPop = window.open('/browse/info.aspx?cid=36193','Advertisement', 'width=365,height=262,screenX=100,screenY=100');

if (PromoPop) 
    {
       PromoPop.blur();
       window.focus();
       setCookieVar("markOpen","PromoPop","1");             
    }
}
</script>

Я безуспешно пытался добавить cookie в элемент управления Forms.Webbrowser, но разочаровался и сдался. Я попытался установить свойство NoAllowNavagate и все остальное безрезультатно.

Кто-нибудь может помочь? Также есть способ получить информацию DomDocument из Console.App, не открывая форму?

Спасибо

Ответы [ 4 ]

6 голосов
/ 25 апреля 2009

Компонент WebBrowser имеет событие NewWindow с CancelEventArgs. Так что просто добавьте обработчик, похожий на:

void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
    e.Cancel = true;
}

Когда javascript пытается открыть всплывающее окно, событие запускается и отменяет его.

0 голосов
/ 01 октября 2009

Вы должны попробовать SHDocVw.dll, чтобы автоматически перехватить новое окно.

        private SHDocVw.WebBrowser_V1 Web_V1;

        // write it on form load event

        Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;

        Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);


        private void Web_V1_NewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
        {
            Processed = true; //Stop event from being processed

            //Code to open in same window
            //this.webBrowser1.Navigate(URL);

            //Code to open in new window instead of same window
            frmEBeyanname Popup = new frmEBeyanname();
            Popup.webBrowser1.Navigate(URL);
            Popup.Show();
        }

пока

0 голосов
/ 25 апреля 2009

Быстрое и грязное решение состояло бы в том, чтобы использовать WebClient для загрузки html во временный файл, заменить рекламный сценарий на string.Empty и загрузить файл в элемент управления.

0 голосов
/ 25 апреля 2009

Можете ли вы добавить Javascript в документ? Вы можете добавить это:

window.open = function() { return false; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...