Windows 7-8 IE 10中的BHO功能 - 适用于单个选项卡,但如果重定向则为0x800A01B6或第二个+选项卡

时间:2014-02-12 21:15:32

标签: c#-4.0 windows-8 internet-explorer-10 bho

所以我写了一个BHO,它公开了一个我从Javascript调用的函数。 我的目标系统是Windows 8 IE 10,但我得到的行为在Windows 7,8 32和64位,IE 10,IE 11上是相同的 - 这没关系,我认为它与系统无关。

所以如果你打开一个具有从BHO调用函数的JavaScript的页面,BHO工作正常 - 它被定义并且一切都很好。我有一个简单的本地页面来测试它调用BHO.method(),在线托管的同一页面也很棒。

但是在以下情况下它不起作用 - 我得到“错误:* property_added *未定义”。 1)如果您在新的附加选项卡中使用JS代码打开相同的测试页面。 (如果只是一个标签 - 它就像我上面描述的那样工作)。 2)如果您在第一个选项卡中打开任何其他页面,然后使用链接重定向(或只是在地址栏中粘贴相同的旧测试页面的URL) - “error:* property_added * is undefined”。

现在有趣的部分 - 我在DocumentComplete事件中添加了一个属性(让我们称之为)* property_added *。我把警报放在那里我可以看到DocumentComplete和AddProperty在所有正确的时间触发并运行,对于每个页面,但是在我描述的情况下,我在'dynamic window = browser.Document.parentWindow;'上得到了这个错误。 - 来自HRESULT的异常:0x800A01B6。请帮帮忙?

下面是我在OnDocumentComplete中使用的代码 - 虽然它很标准。

void OnDocumentComplete(object pDisp, ref object URL)
    {
        try
        {
            SHDocVw.IWebBrowser2 explorer = pDisp as SHDocVw.IWebBrowser2;

            if (explorer != null)
            {                                        
                dynamic window = explorer.Document.parentWindow;

                IExpando windowEx = (IExpando)window;

                PropertyInfo property = windowEx.GetProperty("BHO",BindingFlags.IgnoreCase); //BindingFlags.Default);
                if (property == null)
                {                        
                    property = windowEx.AddProperty("BHO");                        
                }
                property.SetValue(windowEx, this, null);                    
                window.execScript("alert();");                  
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);                
        }
    }


int IObjectWithSite.SetSite(object site)
    {
        this.site = site;
        if (site != null)
        {
            browser = (InternetExplorer)site; 

            ((DWebBrowserEvents2_Event)browser).DocumentComplete +=
                new DWebBrowserEvents2_DocumentCompleteEventHandler(this.OnDocumentComplete);
        }
        return 0;
    }

更新:当我添加以下字符串

window.execScript("alert('BHO is '+(typeof(BHO) == 'undefined' ? 'undefined' : 'defined'));");
property.SetValue(windowEx, this, null);之后的OnDocumentComplete中的

- 重定向的页面案例突然开始正常工作。如果我删除这个字符串 - 它不起作用。这个世界怎么会有所作为?

0 个答案:

没有答案