2008-10-06 21 views
12

.NET WebBrowser नियंत्रण का उपयोग करते समय आप उसी सत्र का उपयोग करके एक नई विंडो में एक लिंक कैसे खोलते हैं (यानी .. शुरू नहीं करें सर्वर पर एक नया एएसपी.नेट सत्र), या उसी वेब ब्राउजर नियंत्रण में यूआरएल खोलने के लिए आप नई विंडो इवेंट कैप्चर कैसे करते हैं?System.Windows.Forms.WebBrowser उसी विंडो में खुले लिंक या उसी सत्र के साथ नई विंडो

उत्तर

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(); 
} 
+0

SHDocVw किस असेंबली में परिभाषित किया गया है? मैं इसे कम से कम mshtml.dll में नहीं ढूंढ सकता। –

+4

मुझे लगता है कि यह% WINDIR में स्थित है% \ system32 \ Shdocvw.dll –

+0

Obejet webBrower1 का एक सदस्य है कि मैं क्या gettinf सभी के लिए कर रहा हूँ –

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 ज़ाहिर है, के संदर्भ में की जरूरत है।