如何使用NPAPI将Delphi VCL表单嵌入HTML页面?
使用Delphi编写ActiveX插件有很多已知的方法,但是ActiveX本身在IE以外的浏览器中有很多限制。所以我在想——如何以NPAPI格式编译一个插件,与Chrome/Firefox本机兼容如何使用NPAPI将Delphi VCL表单嵌入HTML页面?,delphi,npapi,browser-plugin,Delphi,Npapi,Browser Plugin,使用Delphi编写ActiveX插件有很多已知的方法,但是ActiveX本身在IE以外的浏览器中有很多限制。所以我在想——如何以NPAPI格式编译一个插件,与Chrome/Firefox本机兼容 该插件的目的是允许将VCL表单嵌入HTML页面,并能够使用JavaScript与该表单进行双向通信。例如,单击表单上的按钮将调用页面上的JavaScript函数,页面上的JavaScript函数可以向VCL表单发送事件。如何实现这一点?Mozilla bugtracker上有一个针对Delphi的现有
该插件的目的是允许将VCL表单嵌入HTML页面,并能够使用JavaScript与该表单进行双向通信。例如,单击表单上的按钮将调用页面上的JavaScript函数,页面上的JavaScript函数可以向VCL表单发送事件。如何实现这一点?Mozilla bugtracker上有一个针对Delphi的现有NPAPI包装器列表: 最新的条目(带有脚本支持的NPAPI插件框架+Yury Sidorov的演示)提供了所需的内容 有了VCL表单,项目可以编译成与NPAPI兼容的DLL。还需要添加Manifest.json。之后,插件可以像往常一样安装到Chrome中 以下HTML代码嵌入了插件中存储的VCL表单:
<EMBED id="embed1" TYPE="application/x-delphi-demo-plugin" ALIGN=CENTER WIDTH=400 HEIGHT=300>
<script>
var embed1 = document.getElementById('embed1');
</script>
<input type=button value="Show Value" onclick='alert("Value=" + embed1.value);'>
另外,现代Delphi版本的唯一修复方法是在整个
NPPlugin.pas
过程中将string
和PChar
更改为AnsiString
和PAnsiChar
。或者与嵌入表单的通信中断。当然有文档记录:@DavidHeffernan:请查看答案,并告诉我链接文档中的信息(包括工作包装代码)在哪里。也许我不理解这个问题。你是在要求图书馆推荐书吗?我相信你们都知道这是离题的。让我试着解释一下:我被要求为Chrome编写一个插件-有两个可能的选择,ActiveX(通过第三方ActiveX插件)和NPAPI插件。Delphi的ActiveX非常简单,但NPAPI却不是——我花了整整半天的时间在谷歌上搜索解决方案。即使如此,我们也没有多少关于这件事的信息。所以我决定与其他人分享我找到的工作解决方案。糟糕的是,它不能用简单的指令来表达——它需要92kb的包装代码。请告诉我,这会使问题和答案偏离主题吗?请注意,Firefox和Chrome都会让大多数插件很快点击播放。Chrome也已经宣布他们打算放弃NPAPI。我不建议现在就开始基于NPAPI的新项目。您确定它应该是ansisting
?这意味着对ANSI字符的限制。我本来希望UTF-8编码支持Unicode。事实上,看看你链接到的图书馆,似乎很清楚UTF-8是通用语言,但图书馆没有认识到这一点。修复它需要大量的工作。的确,UTF-8将是一个合适的解决方案,但目前,AnsiString
通过使示例代码工作(即使有ANSI限制)来完成这项工作。这里最重要的是VCL表单在浏览器中与JS进行通信。@学生:也许你应该问一个单独的问题。到目前为止还不清楚。我问的问题是这里的url@DelphiStudent:当然。通过Skype与我联系:kromster80
with Plugin.GetBrowserWindowObject do
GetObject('document')['bgColor'] := clRed;