GeckoFX观察者服务

本文关键字:服务 观察者 GeckoFX | 更新日期: 2023-09-27 18:09:36

我试图阻止页面上的特定图像加载,但是我遇到了一点麻烦。

GeckoWebBrowser的HttpActivityObserver正在返回一个未实现的异常和崩溃我的程序,所以我试图实现我自己的观察者,但观察方法没有被调用。

任何想法都会有帮助。

public class HttpObserver : nsIObserver
{
    private nsIObserverService service;
    private List<string> bans;
    public HttpObserver()
    {
        bans = new List<string>();
        service = Xpcom.CreateInstance<nsIObserverService>("@mozilla.org/observer-service;1");
    }
    public void Register()
    {
        service.AddObserver(this, "http-on-modify-request", false);
    }
    public void Unregister()
    {
        service.RemoveObserver(this, "http-on-modify-request");
    }
    public void BanUrl(string url)
    {
        bans.Add(url);
    }
    public void Observe(nsISupports aSubject, string aTopic, string aData)
    {
        nsIHttpChannel httpChannel = Xpcom.QueryInterface<nsIHttpChannel>(aSubject);
        if (aTopic == "http-on-modify-request")
        {
            foreach (string url in bans)
            {
                if (url == httpChannel.GetURIAttribute().ToUri().AbsoluteUri)
                {
                    httpChannel.Cancel(unchecked((int)0x804b0002));
                }
            }
        }
    }
}

GeckoFX观察者服务

明白了。对于其他与此挣扎的人,请替换Xpcom。创建Xpcom接口。GetService

谢谢,我试着找到替代的BeforeNavigate2和所有你需要的只是:

Gecko.GeckoWebBrowser wb = new GeckoWebBrowser { Dock = DockStyle.Fill, UseHttpActivityObserver = true };
wb.ObserveHttpModifyRequest += (o, e) => { MessageBox.Show(e.Uri.ToString()); };