Вы не можете получить свой торт и съесть его, по-видимому.
В настоящее время я использую System.Windows.Forms.WebBrowser
в своем приложении.В настоящее время программа зависит от использования функции GetElementsByTagName
.Я использую его, чтобы собрать все элементы определенного типа (либо «входные», либо «текстовые»), чтобы я мог отсортировать их и вернуть значение определенного элемента.Вот код этой функции (мой веб-браузер называется web1):
// returns the value from a element.
public String FetchValue(String strTagType, String strName)
{
HtmlElementCollection elems;
HtmlDocument page = web1.Document.Window.Frames[1].Document;
elems = page.GetElementsByTagName(strTagType);
foreach (HtmlElement elem in elems)
{
if (elem.GetAttribute("name") == strName ||
elem.GetAttribute("ref") == strName)
{
if (elem.GetAttribute("value") != null)
{
return elem.GetAttribute("value");
}
}
}
return null;
}
(указывает на то, что веб-страница, из которой мне нужно извлечь, находится во фрейме, и, в зависимости от обстоятельств, идентифицирующее имя элементабудет либо в названии, либо в атрибуте ref)
Все это работает как сон с System.Windows.Forms.WebBrowser
.
Но то, что он не может сделать, - это перенаправить открытиеновое окно, чтобы остаться в приложении.Все, что открывается в новом окне, запускается в браузере пользователя по умолчанию, тем самым теряя сеанс.Эту функциональность можно легко исправить с помощью события NewWindow2
, которого System.Windows.Forms.WebBrowser
не имеет.
Теперь простите за то, что я ошеломлен его отсутствием.Я только что отказался от VB6 и перешел на C # (да, VB6, очевидно, я работаю под скалой), а в VB6 WebBrowser
обладал как функцией GetElementsByTagName
, так и событием NewWindow2
.
У AxSHDocVw.WebBrowser
есть событие NewWindow2
.Я был бы более чем рад помочь мне направить мои новые окна туда, где они мне нужны.Код для этого в THAT WebBrowser
: (frmNewWindow - простая форма, содержащая только другую WebBrowser
, называемую web2 (Dock установлена в Fill)):
private void web1_NewWindow2(
object sender,
AxSHDocVw.DWebBrowserEvents2_NewWindow2Event e)
{
frmNewWindow frmNW = new frmNewWindow();
e.ppDisp = frmNW.web2.Application;
frmNW.web2.RegisterAsBrowser = true;
frmNW.Visible = true;
}
Я не могу произвести самостоятельноспособ воспроизвести эту функцию с подавляющим регулярным событием NewWindow.
Я также не могу понять, как воспроизвести функцию FetchValue
, описанную выше, используя AxSHDocVw.WebBrowser
.Кажется, все идет совсем по-другому, и все мои знания о том, как делать вещи, бесполезны.
Я знаю, что я больной, извращенный человек из-за этой странной фантазии об использовании этих двух вещей водно приложение.Но можете ли вы найти в своем сердце помощь этому глупому идеалисту?