Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用NPAPI将Delphi VCL表单嵌入HTML页面?_Delphi_Npapi_Browser Plugin - Fatal编程技术网

如何使用NPAPI将Delphi VCL表单嵌入HTML页面?

如何使用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的现有

使用Delphi编写ActiveX插件有很多已知的方法,但是ActiveX本身在IE以外的浏览器中有很多限制。所以我在想——如何以NPAPI格式编译一个插件,与Chrome/Firefox本机兼容


该插件的目的是允许将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;