【问题标题】:Internet Explorer 11 Extension (BHO) with C#带有 C# 的 Internet Explorer 11 扩展 (BHO)
【发布时间】:2014-11-21 20:35:25
【问题描述】:

我正在尝试将 Internet Explorer 11 的扩展作为 Visual C# 中的浏览器帮助对象编写。我在 Windows 7 上使用 Visual Studio 2013。凭借这里的 zilch 经验,我遇到了一堵试图起步的砖墙。 我不确定如何为 BHO 实现接口 IObjectWithSite。我尝试了一些基本的方法来让我开始,但它不起作用......有什么想法吗?

using System;
using System.Runtime.InteropServices;
using SHDocVw;
using mshtml;
using System.Windows.Forms;

namespace IeAddOnDemo
{
    [ComVisible(true),
    Guid("9AB12757-BDAF-4F9A-8DE8-413C3615590C"),
    ClassInterface(ClassInterfaceType.None)]
    public class BHO : IObjectWithSite
    {
        public void SetSite(object site)
        {
            System.Diagnostics.Debug.WriteLine("hello");
        }

        public void GetSite(ref Guid guid, out IntPtr ppvSite)
        {
            System.Diagnostics.Debug.WriteLine("hello");
            ppvSite = new IntPtr();
        }
   }

}

我什至无法将其写入控制台。在我注册 BHO 时,它正在被 IE 获取,它出现在“设置”菜单的“管理加载项”下。

希望通过这个 BHO,我将尝试访问 IE,然后希望操纵 DOM。这对我来说是一种陌生的做事方式(我习惯于 Eclipse RCP、Linux)所以我希望有人能指出我正确的方向!

干杯!

【问题讨论】:

标签: c# windows internet-explorer bho


【解决方案1】:

如果您在“管理加载项”页面的列表中看到 BHO,那么它应该可以工作。操作系统 System.Diagnostics.Debug.WriteLin 可能无法正常工作,因为 BHO 通常只能访问浏览器本身之外的所有内容。尝试另一件事 - 尝试将下面的方法粘贴到 GetSite/SetSite 方法中。

MessageBox.Show("Bho is working");

之后,如果显示消息框 - 它们被调用并且 BHO 工作。还可以尝试查看任务管理器中启动了哪些 IE 进程,AFAIK BHO 被分配了一个单独的进程。

关于 DOM 操作 - 尝试来自 CodeProject 或其他 SO 答案的文章中的示例,例如来自http://www.codeproject.com/Articles/149258/Inject-HTML-and-JavaScript-into-an-existing-page-w

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多