Остановить оповещение всплывающего окна javascript в web-браузере c # control - PullRequest
5 голосов
/ 03 октября 2010

Этот веб-сайт: http://blog.joins.com/media/folderListSlide.asp?uid=ddatk&folder=3&list_id=9960150

имеет следующий код:

<script>alert('¿Ã¹Ù¸¥ Çü½ÄÀÌ ¾Æ´Õ´Ï´Ù.');</script>

Так что мой элемент управления веб-браузера показывает всплывающее окно, как я могу обойти всплывающее окно без использования sendkeys, введите ??

Ответы [ 6 ]

5 голосов
/ 18 октября 2010

В обработчик событий ProgressChanged вы вставляете элемент сценария, который заменяет функцию Javascript alert на вашу собственную функцию, которая ничего не делает:

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
    {
        if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
        {
            HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
            HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
            IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
            string alertBlocker = "window.alert = function () { }";
            element.text = alertBlocker;
            head.AppendChild(scriptEl);
        }
    }

Чтобы это работало, вам нужно добавить ссылку на Microsoft.mshtml и use mshtml; в вашей форме.

4 голосов
/ 03 октября 2010

обрабатывает IDocHostShowUI :: ShowMessage и возвращает S_OK. Проверьте http://www.codeproject.com/KB/miscctrl/csEXWB.aspx для примера.

4 голосов
/ 03 октября 2010

Если вы не собираетесь использовать функцию alert() на своей странице, вы также можете просто переопределить ее.Например:

<script type="text/javascript">
alert = function(){}
</script>

Если вам нужно использовать функцию оповещения JavaScript, вы можете «перегрузить» ее:

<script type="text/javascript">
var fnAlert = alert;
alert = function(message,doshow) {
    if (doshow === true) {
        fnAlert(message);
    }
}
alert("You won't see this");
alert("You will see this",true);
</script>
2 голосов
/ 25 апреля 2011

решение дано неверно

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
    if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
    {
        HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
        HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
        IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
        string alertBlocker = "window.alert = function () { }";
        element.text = alertBlocker;
        head.AppendChild(scriptEl);
    }
}

Кажется, что обработка сообщения Windows - это решение

1 голос
/ 03 октября 2010

Я думаю, что вы перемещаетесь по странице в пределах alert(xxx) в ее JavaScript, используя WebBroswer в приложении WinForm?Вы можете попробовать:

broswer.Navigated += (sender, args) =>
  {
     var document = (sender as WebBrowser).DocumentText;
     //find the alert scripts and remove/replace them
  }
0 голосов
/ 21 декабря 2013

Вы можете отключить все всплывающие окна, установив

webBrowser.ScriptErrorsSuppressed = true;

Несмотря на название, эти настройки фактически блокируют все всплывающие окна, включая alert()

...