c# WebBrowser -帮助为导航方法添加标志

本文关键字:方法 添加 标志 导航 WebBrowser 帮助 | 更新日期: 2023-09-27 18:08:08

我不是COM对象的高手,但是,我需要扩展WebBrowser控件来支持导航方法中的标志(特别是为了防止从缓存中读取/写入)。

从我收集我需要实现IWebBrowser2在某种程度上。我可以只实现导航方法吗?还是需要在接口中定义所有方法?

我发现了一些附加/分离事件接收器的例子,以扩展web浏览器的事件,但很少围绕实际的方法。

我可以使用底层的ActiveXInstance的WebBrowser控件吗?如果我创建一个类,实现IWebBrowser2::导航,并cast一个变量到它的类,分配WebBrowser控件ActiveXInstance然后尝试导航,我得到一个COM异常HRESULT E_FAIL

我发现了这个,但不确定底层控件是否仍然是ShDocVw,因为我没有在我的COM对象(目标FW .Net 3.5)中看到它:Web浏览器处理应用程序内的弹出窗口

internal ShDocVw.WebBrowser ActiveXWebBrowser { get; private set; }`
new public void Navigate(string url)
{
    this.Navigate(url, axNativeMethods.WebBrowserNavigateFlags.NoReadFromCache | axNativeMethods.WebBrowserNavigateFlags.NoWriteToCache, string.Empty, new byte[] { }, string.Empty);
}
public void Navigate(string url, axNativeMethods.WebBrowserNavigateFlags flags, string targetFrameName, byte[] postData, string headers)
{
    this.ActiveXWebBrowser = (ShDocVw.WebBrowser)this.ActiveXInstance;`
    object flagsObj = (flags == axNativeMethods.WebBrowserNavigateFlags.None) ? null : (object)flags;
    object targetFrameNameObj = targetFrameName;
    object headersObj = headers;
    object postDataObj = postData;
    ActiveXWebBrowser.Navigate(url, ref flagsObj, ref targetFrameNameObj, ref postDataObj, ref headersObj);
}

c# WebBrowser -帮助为导航方法添加标志

这是扩展方法的完美用例。基本上,它们允许您在静态类中定义方法,这些方法看起来直接绑定到要扩展的类型,并且其行为与类型上的公共实例方法非常相似,除了只有公共或内部(在友元程序集或扩展类和扩展类位于同一程序集的情况下)可用。

下面是一个示例片段:

public static class WebBrowserExtensions
{
    public static void Navigate(this IWebBrowser2 browser, string url)
    {
        browser.Navigate(url, /* fill in arguments as necessary*/)
    }
}