博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi项目中TWebBrowser与JS交互(window.external)的一种简便实现方法
阅读量:5012 次
发布时间:2019-06-12

本文共 956 字,大约阅读时间需要 3 分钟。

在很多项目中我们需要嵌入HTML页面来实现一些效果,在嵌入的HTML页面中访问浏览器外壳的扩展功能(Delphi代码)往往是通过window.external来调用,这时需要在浏览器容器中实现IDocHostUIHandler接口的GetExternal方法并返回一个实现了IDispatch接口的COM对象;在高版本的Delphi中TWebBrowser控件已经实现了这个接口,不过并没有返回可用的COM对象,代码类似下面:

function TWebBrowser.GetExternal(out ppDispatch: IDispatch): HRESULT;begin  ppDispatch := nil;  Result := E_FAIL;end;

该方法是TWebBrowser的私有方法并不能通过覆盖来修改,但是可以将TWebBrowser所在单元SHDocVw.pas复制到项目目录内,通过修改已有代码来实现,在编译时Delphi会优先使用项目目录内的SHDocVw.pas。

具体的操作方法是:

1、在TWebBrowser中添加一个属性:

property ExternalObject: IDispatch read FExternalObject write FExternalObject;

2、修改GetExternal方法的实现:

function TWebBrowser.GetExternal(out ppDispatch: IDispatch): HRESULT;begin  ppDispatch := nil;  Result := E_FAIL;  if Assigned(FExternalObject) then  begin    try      ppDispatch := FExternalObject;      Result := S_OK;    except    end;  end;end;

3、在TWebBrowser创建后给新添加的属性:ExternalObject赋值一个实现了IDispatch接口的COM对象即可调用该对象内的方法。

转载于:https://www.cnblogs.com/huixch/p/9854371.html

你可能感兴趣的文章
Spring Quartz实现任务调度
查看>>
python | 桶排序、冒泡排序、选择排序、去重
查看>>
两个Html页面之间值得传递
查看>>
EasyUI datagrid 的多条件查询
查看>>
Mac升级bash到最新版本
查看>>
利用vagrant打包系统--制作自己的box
查看>>
美女与硬币问题
查看>>
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
iOS10 app连接不上网络的问题
查看>>
结对开发之电梯调度最终稿(徐梦迪&刘博)
查看>>
simple java mail
查看>>
信息建模
查看>>
Mybatis 数据库物理分页插件 PageHelper
查看>>
虚函数、纯虚函数详解
查看>>
z-stack中数据的发送,广播、组播、点对点
查看>>