none
Нажатие кнопки в Webbrowser и открытие страницы в текущем окне C# RRS feed

  • Вопрос

  • Здравствуйте!

    Есть некий сайт с кнопкой типа

    <a href="javascript:void(0)" id="button1" class="ok-btn">OK</a>

    когда на нее нажимаю, то открывается нужная нам страница в новой вкладке, а страница с каким-то "спамом" в основной (это если в нормальном браузере)...
    А в программе почему-то, когда я  использую вот такую строчку (и когда просто кликаю, но сейчас важно следующее):
    webbrowser1.Document.GetElementById("button1").InvokeMember("click");

    нужная нам страница открывается в новом окне ИнтернетЭксплорера, а страница со спамом - в нашем webbrewser1...
    так вот, как сделать чтоб нужная страница открывалась в webbrowser1, а не в новом окне IE, или хотя бы в новой вкладке webbrowser1 ???
    еще могу добавить, что с кнопкой (на самом сайте) связан такой скриптик:
    $("#button1").click(function() {        showTabs('http://путь.к/рекламе.php', '/путь/к_нужной/странице');    });

    • Изменено yuremboo 31 мая 2012 г. 6:33

Ответы

  • Если нужно перехватывать все новые окна и открывать их в текущем, то попробуйте воспользоваться следующим кодом, должно помочь:

    1) Add reference -> Com -> Microsoft Internet Controls
    2)
    private void Form1_Shown(object sender, EventArgs e)
            {
                SHDocVw.WebBrowser_V1 Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
                Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
            }
    3)
    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);
            }


    Для связи [mail]

    • Предложено в качестве ответа YatajgaEditor 31 мая 2012 г. 8:37
    • Помечено в качестве ответа yuremboo 31 мая 2012 г. 8:51
  • Попробуйте использовать свойство:

    Webbrowser1.ScriptErrorsSuppressed = true;

    А ещё лучше воспользуйтесь вот этим решением.


    • Предложено в качестве ответа YatajgaEditor 31 мая 2012 г. 8:46
    • Отменено предложение в качестве ответа YatajgaEditor 31 мая 2012 г. 8:46
    • Изменено YatajgaEditor 31 мая 2012 г. 8:47
    • Помечено в качестве ответа yuremboo 31 мая 2012 г. 8:51
    Модератор

Все ответы

  • А вы попробуйте вот так, без вызова InvokeMember, эмуляцией.

    private void button1_Click(object sender, EventArgs e)
        {
          HtmlElementCollection link = webBrowser1.Document.GetElementsByTagName("a");
          if (link != null && link.Count != 0)
          {
            HtmlElement element = link["button1"];
            element.ScrollIntoView(true);
            element.Focus();
            SendKeys.Send("{ENTER}");
          }
        }

    Модератор
  • Если нужно перехватывать все новые окна и открывать их в текущем, то попробуйте воспользоваться следующим кодом, должно помочь:

    1) Add reference -> Com -> Microsoft Internet Controls
    2)
    private void Form1_Shown(object sender, EventArgs e)
            {
                SHDocVw.WebBrowser_V1 Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
                Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
            }
    3)
    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);
            }


    Для связи [mail]

    • Предложено в качестве ответа YatajgaEditor 31 мая 2012 г. 8:37
    • Помечено в качестве ответа yuremboo 31 мая 2012 г. 8:51
  • Если нужно перехватывать все новые окна и открывать их в текущем, то попробуйте воспользоваться следующим кодом, должно помочь:

    1) Add reference -> Com -> Microsoft Internet Controls
    2)
    private void Form1_Shown(object sender, EventArgs e)
            {
                SHDocVw.WebBrowser_V1 Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
                Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
            }
    3)
    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);
            }


    Для связи [mail]

    да, отлично, то что нужно, СПАСИБО ОГРОМНОЕ!!!

    еще вопросик, чтобы не открывать новую тему:

    после нажатия на кнопку выскакивает ошибка сценария IE, нажимаю Да и страница открывается... можно это как-то отключить, или хотя б чтоб программно нажать кнопку "Да"???

    • Помечено в качестве ответа yuremboo 31 мая 2012 г. 8:51
    • Снята пометка об ответе yuremboo 31 мая 2012 г. 8:51
  • Попробуйте использовать свойство:

    Webbrowser1.ScriptErrorsSuppressed = true;

    А ещё лучше воспользуйтесь вот этим решением.


    • Предложено в качестве ответа YatajgaEditor 31 мая 2012 г. 8:46
    • Отменено предложение в качестве ответа YatajgaEditor 31 мая 2012 г. 8:46
    • Изменено YatajgaEditor 31 мая 2012 г. 8:47
    • Помечено в качестве ответа yuremboo 31 мая 2012 г. 8:51
    Модератор
  • Попробуйте использовать свойство:

    Webbrowser1.ScriptErrorsSuppressed = true;

    да, отлично, спасибо за быстрое реагирование! :)
    • Помечено в качестве ответа yuremboo 31 мая 2012 г. 8:51
    • Снята пометка об ответе yuremboo 31 мая 2012 г. 8:51
  • Если нужно перехватывать все новые окна и открывать их в текущем, то попробуйте воспользоваться следующим кодом, должно помочь:

    1) Add reference -> Com -> Microsoft Internet Controls
    2)
    private void Form1_Shown(object sender, EventArgs e)
            {
                SHDocVw.WebBrowser_V1 Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
                Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
            }
    3)
    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);
            }


    Для связи [mail]

    а вот как в новой вкладке открыть то окно которое должно было открыться в первой?

  • а вот как в новой вкладке открыть то окно которое должно было открыться в первой?
  • Подписаться на событие Navigating из него получить url куда браузер собирается переходить и открывать его в новом WebBrowser или через Process.Start(url) открыть в браузере по умолчанию.

    Для связи [mail]

    7 июня 2012 г. 10:05