显然,你不能一边吃蛋糕一边吃。
我目前正在System.Windows.Forms.WebBrowser
我的应用程序中使用。该程序目前依赖于使用该GetElementsByTagName
功能。我用它来收集某种类型的所有元素(“input”或“textarea”),所以我可以对它们进行排序并返回特定元素的值。这是该函数的代码(我的 WebBrowser 名为 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;
}
(注意点:我需要拉取的网页是在一个框架中,根据情况,元素的标识名称会在 name 或 ref 属性中)
所有这些对System.Windows.Forms.WebBrowser
.
但它无法做的是重定向新窗口的打开以保留在应用程序中。在新窗口中打开的任何内容都会发送到用户的默认浏览器,从而丢失会话。此功能可以通过没有的NewWindow2
事件轻松修复。System.Windows.Forms.WebBrowser
现在请原谅我对它的缺席感到震惊。我最近放弃了 VB6 并转向 C#(是的 VB6,显然我是在一块石头下工作的),而在 VB6 中,它WebBrowser
同时拥有了GetElementsByTagName
函数和NewWindow2
事件。
有AxSHDocVw.WebBrowser
一个NewWindow2
事件。如果能帮助我将新窗口路由到我需要它们的地方,我会非常高兴。执行此操作的代码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
. 它似乎以完全不同的方式处理事情,我所有关于如何做事的知识都是无用的。
我知道我是一个病态的、扭曲的人,因为在一个应用程序中使用这两个东西的奇怪幻想。但是你能找到帮助这个愚蠢的理想主义者的心吗?