如何为IE、Firefox和Chrome编写网页浏览器插件

3
我需要编写一个支持IE 7+,Firefox 3+,Chrome的网页浏览器插件。
该插件必须能够在Web页面中放置一个DirectX对象。
我没有插件开发经验。
我进行了一些调查,并决定使用FireBreath进行开发。
以下是我的问题:
1. 我不知道如何将图像放置在插件区域内。可以提供示例吗?
2. 如何在其中放置DirectX对象?有任何示例吗?
3. 如何触发自动安装呢?
谢谢!
Sara

你需要使用ActiveX技术来编写IE插件。这可以使用几乎任何MS开发工具来完成。Directx是一个更棘手的问题。直接与DX API交互至少会非常困难。(但是有一些DX前端,需要检查你熟悉的工具)。 - vbence
FireBreath 透明地处理 ActiveX 层,这使得它变得更加简单。 - taxilian
2个回答

9
好的,你需要解决两个问题。其中理解插件是比较容易的,因为有FireBreath可以帮助你。天啊,写这篇文章的人一定很聪明!(好吧,那个人就是我,所以我不得不这么说)
首先要明白的是,你不能在任何地方“放置”“DirectX对象”。你也不能在插件内部“放置”图像。相反,你需要像在任何其他Windows应用程序中一样将图像绘制到窗口中。
你可能想查看我的另一个类似问题的答案:Directx control in browser plugin 在Windows上的正常插件实例(“窗口化”插件)中,你会得到一个HWND,可以将其绘制出来。你需要在该窗口中设置一个DirectX上下文并绘制它 - 无论是在应用程序需要的帧速率还是只在刷新事件时。如果你按照链接中的内容,你会看到一个关于如何在Windows上绘制的帖子;这应该会帮助你更好地理解如何获取HWND。
图像基本上是相同的;如果你有图像数据,可以使用普通的Windows绘图API将其绘制到HWND上。
最后,如果你需要额外的帮助,我强烈建议你进入FireBreath IRC chat聊天室。我通常在工作日的白天(GMT-0600)会在场,还有其他人也可以提供帮助。

哦,关于自动安装的问题,这不是一个容易解决的问题。我的解决方案是简单地不去做它;相反,我使用JavaScript来检测插件是否存在并提示用户下载它。如果这还不够好,你可以将它打包在Firefox的XPI、Chrome的CRX和IE的CAB中。只有CAB可以用于所有浏览器的安装,其他的将是特定于浏览器的。我让他们下载的msi安装程序可以为所有浏览器安装。 - taxilian
我不明白 - CAB 是否适用于所有浏览器?那么为什么您的解决方案不使用它呢?您能提供一个好的 CAB 教程链接吗? - sara
我想尝试聊天,但我在其他国家工作,时差很大...所以我会尝试总结问题-我得到了HWND,创建了一个线程,将其作为参数传递,并复制了我的DirectX代码。一切都好...但是-窗口中没有显示任何内容。我认为这是因为我没有处理RefreshEvent-在FireBreath中如何处理?我的普通Windows代码行不通... - sara
CAB将适用于所有浏览器,但只能在IE中使用。它还需要页面刷新,尽管其他选项(不包括MSI)需要完全重新加载页面。 - taxilian
你创建了线程,但是你在线程内部创建了渲染循环吗?你必须告诉它在HWND中实际绘制才能这样做。处理RefreshEvent就像在事件映射中添加另一行和一个处理函数一样简单,然后以某种方式向其他线程发送消息并告诉它进行绘制。你可以使用队列和条件变量、FB::SafeQueue或任何其他方式将消息发布到你的渲染线程,但这实际上是关于如何进行安全的跨线程通信的不同问题。 - taxilian
显示剩余5条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接