我正在尝试将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,然后希望操纵DOM。这是一种为我做事的外来方式(我已经习惯了Eclipse RCP,Linux)所以我希望有人可以指出我正确的方向!
干杯!
答案 0 :(得分:0)
如果您在"管理加载项"的列表中看到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。
希望这会有所帮助。