Internet Explorer 11扩展(BHO)与C#
问题描述:
我想写一个Internet Explorer 11的扩展名作为浏览器帮助对象在Visual C#中。我在Windows 7上使用Visual Studio 2013.在这里有Zilch的经验,我跑进了一堵砖墙,试图起飞。 我并不确定如何为BHO实现接口IObjectWithSite。我试过一些基本的东西让我开始,但它不工作......任何想法?Internet Explorer 11扩展(BHO)与C#
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),所以我希望有人能指引我朝着正确的方向发展!
干杯!
答
如果您在“管理附加组件”页面的列表中看到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。
希望这会有所帮助。
请注意[在托管代码中写入BHO明确不支持](http://msdn.microsoft.com/en-us/library/windows/desktop/dd758089(v = vs.85).aspx)。 – 2014-11-22 08:37:50
我的替代品是什么?你能推荐一个完整的微软平台新手的方向吗? – Boon 2014-11-22 11:47:02
阅读文章进一步讨论。 C++是进程扩展中最常用的实现语言。 – 2014-11-22 15:06:22