• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi项目中TWebBrowser与JS交互(window.external)的一种简便实现方法 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在很多项目中我们需要嵌入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对象即可调用该对象内的方法。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap