.NET WebBrowser 컨트롤을 사용하는 경우 동일한 세션을 사용하여 새 창에서 링크를 여는 방법 (예 : 시작하지 않음) 서버의 새 ASP.NET 세션) 또는 동일한 웹 브라우저 컨트롤에서 URL을 여는 새 창 이벤트를 캡처하는 방법은 무엇입니까?System.Windows.Forms.WebBrowser 동일한 세션 또는 동일한 세션의 새 창에서 링크 열기
12
A
답변
19
답변을 찾는 데 단지 시간이 걸렸으므로 여기에 결과를 게시하겠습니다. NewWindow 이벤트를 캡처하려면 SHDocVwCtl.WebBrowser_V1 개체를 사용할 수 있습니다.
참고 : 코드 http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_21484555.html#discussion
//-------------------------------VB.NET Version:-------------------------------
Dim WithEvents Web_V1 As SHDocVwCtl.WebBrowser_V1
Private Sub Form_Load()
Set Web_V1 = WebBrowser1.Object
End Sub
Private Sub Web_V1_NewWindow(ByVal URL As String, ByVal Flags As Long, ByVal TargetFrameName As String, PostData As Variant, ByVal Headers As String, Processed As Boolean)
Processed = True
WebBrowser1.Navigate URL
End Sub
//-------------------------------C# Version-------------------------------
private SHDocVw.WebBrowser_V1 Web_V1; //Interface to expose ActiveX methods
private void Form1_Load(object sender, EventArgs e)
{
//Setup Web_V1 interface and register event handler
Web_V1 = (SHDocVw.WebBrowser_V1)this.webBrowser1.ActiveXInstance;
Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(Web_V1_NewWindow);
}
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);
//Code to open in new window instead of same window
//Form1 Popup = new Form1();
//Popup.webBrowser1.Navigate(URL);
//Popup.Show();
}
3
에서 살짝 그렉의 대답의 버전을 청소. 전역 변수에 의존하기보다는 전달 된 컨트롤의 동작을 수정합니다. 사용법 :
InlinePopups(webBrowser1);
코드 :
// interface to expose ActiveX methods
private SHDocVw.WebBrowser_V1 Web_V1;
private void InlinePopups(WebBrowser browser)
{
// hooks to force new windows to open in the current instance
Web_V1 = (SHDocVw.WebBrowser_V1)browser.ActiveXInstance;
Web_V1.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler((string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed) =>
{
Processed = true; // stop event from being processed
// open in the existing window
browser.Navigate(URL);
});
}
아직도 물론의 % WINDIR % \ system32 \ shdocvw.dll을,에 대한 참조를 필요로한다.
SHDocVw가 정의 된 어셈블리는 무엇입니까? 적어도 mshtml.dll에서 찾을 수 없습니다. –
나는 그것을 %의 WINDIR에 위치해 생각 % \ system32를 \ shdocvw.dll을 –
Obejet 내가 모두를위한 gettinf이 정말 나에게 도움이 –