どうやら、ケーキを持って食べることはできません。
現在、アプリケーションで を使用しSystem.Windows.Forms.WebBrowser
ています。プログラムは現在、関数の使用に依存していGetElementsByTagName
ます。これを使用して、特定のタイプ (「入力」または「テキストエリア」) のすべての要素を収集するため、それらを並べ替えて、特定の要素の値を返すことができます。これはその関数のコードです (私の 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;
}
(注意点: 取得する必要がある Web ページはフレーム内にあり、状況によっては、要素の識別名が name または ref 属性のいずれかに含まれます)
そのすべてが、 で夢のように機能しSystem.Windows.Forms.WebBrowser
ます。
しかし、それができないのは、新しいウィンドウを開くことをリダイレクトしてアプリケーションに残すことです。新しいウィンドウで開くものはすべて、ユーザーの既定のブラウザーに送信されるため、セッションが失われます。この機能は、持っていないNewWindow2
イベントで簡単に修正できます。System.Windows.Forms.WebBrowser
その不在に唖然としたことを許してください。私は最近VB6を捨ててC#に移りました(はい、VB6、どうやら私は岩の下で雇用されているようです)。VB6では、関数とイベントWebBrowser
の両方を所有していました。GetElementsByTagName
NewWindow2
AxSHDocVw.WebBrowser
にはイベントNewWindow2
があります。新しいウィンドウを必要な場所にルーティングするのに役立ちます。THAT でこれを行うコードWebBrowser
は次のとおりです (frmNewWindow は web2 と呼ばれる別のフォームのみを含む単純なフォームですWebBrowser
(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
。まったく違う方法で物事を進めるように見え、物事を行う方法についての私の知識はすべて役に立たない.
1 つのアプリケーションでこれら 2 つのものを使用するというこの奇妙なファンタジーについては、私は病気でねじ曲がった男であることを知っています。しかし、あなたはこの愚かな理想主義者を助けることができるでしょうか?