这里有没有人有开发可以分享知识的IE扩展的经验?这将包括代码示例,或指向良好代码的链接,或关于流程的文档,或任何内容。
我真的很想这样做,但是我正在用一个糟糕的文档,糟糕的代码/示例代码/缺乏它来撞墙。我们非常感谢您提供的任何帮助/资源。
具体来说,我想从如何从IE扩展中访问/操作DOM开始。
编辑,更多细节:
理想情况下,我想设置一个工具栏按钮,当单击该按钮时,会弹出一个包含指向外部网站的链接的菜单。我还想根据某些条件访问DOM并在页面上植入JavaScript。
在IE扩展程序中保留信息的最佳方法是什么?在Firefox / Chrome /大多数现代浏览器中,您使用window.localStorage
,但显然使用IE8 / IE7,这不是一个选项。也许是SQLite DB等?可以假设.NET 4.0将安装在用户的计算机上吗?
我不想使用Spice IE,因为我想构建一个与IE9兼容的。我也在这个问题上添加了C ++标签,因为如果用C ++构建一个更好,我可以做到。
答案 0 :(得分:223)
答案 1 :(得分:13)
另一个很酷的方法是结帐:
这是一个基于JS和jquery的框架,它允许您使用一个通用的JS代码为IE,FF和Chrome开发浏览器扩展。 基本上,框架可以完成所有令人讨厌的工作,而您只需要编写应用程序代码。
答案 2 :(得分:11)
IE扩展的状态实际上非常难过。你有IE5浏览器助手对象的旧模型(是的,那些臭名昭着的BHO,每个人都喜欢在当天阻止),工具栏和IE的新加速器。 即便如此,兼容性有时会破裂。我过去常常维护IE6的扩展,但是有些东西已经改变了。在大多数情况下,据我所知(我多年没有接触过BHO)你仍然需要使用活动模板库(类似于微软COM的STL)对它们进行编码,而且这样只适用于C ++。 您可以使用C#进行COM Interop,并在C#中完成它,但它可能对于它的价值来说太难了。 无论如何,如果你有兴趣编写你自己的IE扩展(如果你想在所有主流浏览器中使用你的扩展,这似乎是合理的)这里是官方微软资源。
http://msdn.microsoft.com/en-us/library/aa753587(v=vs.85).aspx
对于IE8中新增的加速器,您可以查看这个。
http://msdn.microsoft.com/en-us/library/cc289775(v=vs.85).aspx
我同意文档很糟糕,API已经过时了。我仍然希望这会有所帮助。
编辑:我想我可以在这里抛出最后一个信息来源。当我在BHO工作时,我正在查看我的笔记。这篇文章让我开始了。它有点旧,但对使用IE BHO(例如IObjectWithSite)时将使用的ATL接口有一个很好的解释。我认为它很好地解释了,并帮助了我很多。 http://msdn.microsoft.com/en-us/library/bb250436.aspx 我还查看了GregC发布的示例。它至少适用于IE8,它与VS 2010兼容,所以如果你想做C#,你可以在那里开始看看Jon Skeet的书。 (深度第2版中的C#)第13章提供了大量有关C#4中新功能的信息,您可以使用它们来更好地与COM进行交互。 (我仍然建议你用C ++做你的插件)
答案 3 :(得分:7)
开发C#BHO是一种痛苦的蠢事。它涉及许多icky COM代码和p / invoke调用。
我有一个大部分完成的C#BHO here,您可以随意使用the source。我说“大部分时间”,因为我从未弄清楚如何save appdata under IE Protected Mode。
答案 4 :(得分:5)
我已经使用IE的webbrowser控件多年了,在他们的过程中,一个名字一遍又一遍地出现在有用的帖子中:Igor Tandetnik
如果我正在开发扩展程序,我会针对BHO,并开始使用Google搜索:
BHO Igor Tandetnik
OR
浏览器助手对象Igor Tandetnik
他的帖子往往非常详细,他知道他在说什么。
您将在COM和ATL编程中发现自己。 有关示例演练,请查看: http://msdn.microsoft.com/en-us/library/ms976373.aspx
答案 5 :(得分:3)
我同意Robert Harvey,C#4.0功能改进了COM互操作。这是一些较旧的C#代码,迫切需要重写。
http://www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx
这是一种通过避免使用ATL并使用Spartan COM来简化操作的尝试:
答案 6 :(得分:3)
如果您不想重新发明轮子,可以试试Add In Express for IE。我已将该产品用于VSTO stuff,而且相当不错。他们还有一个有用的论坛和快速支持。
答案 7 :(得分:3)
显然已经解决了,但对于其他用户,我建议 SpicIE框架。我基于它做了自己的扩展。它仅支持Internet Explorer 7/8,但我在Internet Explorer 6-10上测试(从Windows XP到Windows 8 Consumer Preview)并且正常工作。 不幸的是,最新版本中存在一些错误,因此我必须修复它们并自行发布: http://archive.msdn.microsoft.com/SpicIE/Thread/View.aspx?ThreadId=5251
答案 8 :(得分:0)
我热烈建议你在2002年发表Pavel Zolnikov的这篇文章!
http://www.codeproject.com/Articles/2219/Extending-Explorer-with-Band-Objects-using-NET-and
它基于Band对象的使用,并使用.Net 2.0编译。 提供源代码并打开并编译Visual Studio 2013。 正如您将在帖子评论中阅读的那样,它适用于IE 11以及Windows 7和Windows 10。 它在Windows 7 + SP1和IE 11上非常适合我 享受!
答案 9 :(得分:0)
问题是从2013年开始,现在是2020年,但这可能对将来的访问者有所帮助。
我尝试实现@Miguel Angelo的答案,但一开始没有奏效。
还有一些需要定义的设置。
在Internet Explorer(我正在使用IE-11)上,转到Tools-->Internet Options-->Advanced
:
答案 10 :(得分:-2)
在Build Events选项卡中,将Post-build events命令行设置为:(x64)列在下面
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\gacutil.exe" /if "$(TargetDir)$(TargetFileName)"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /u "$(TargetDir)$(TargetFileName)"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" "$(TargetDir)$(TargetFileName)"
我想要Build Events选项卡,将Post-build events命令行设置为(32位操作系统)
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\gacutil.exe" /if "$(TargetDir)$(TargetFileName)"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" /u "$(TargetDir)$(TargetFileName)"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "$(TargetDir)$(TargetFileName)"