【发布时间】:2011-07-10 11:42:23
【问题描述】:
如何使用 Delphi 从正在运行的 Chrome 实例中获取 url?
我正在尝试做一个 Delphi 应用程序来获取浏览器(IE、Mozilla 等)的活动选项卡的 url。我正在使用适用于 IE 的代码:
procedure TForm1.GetCurrentURL (var URL, Title : string);
var
DDEClient : TDDEClientConv;
s : string;
begin
s := '';
try
DDEClient := TDDEClientConv.Create(self);
with DDEClient do
begin
if SetLink('IExplore','WWW_GetWindowInfo') then
s := RequestData('0xFFFFFFFF,sURL,sTitle')
else
if SetLink('Netscape','WWW_GetWindowInfo') then
s := RequestData('0xFFFFFFFF,sURL,sTitle')
else
if SetLink('Mosaic','WWW_GetWindowInfo') then
s := RequestData('0xFFFFFFFF,sURL,sTitle')
else
if SetLink('Netscp6','WWW_GetWindowInfo') then
s := RequestData('0xFFFFFFFF,sURL,sTitle')
else
if SetLink('Mozilla','WWW_GetWindowInfo') then
s := RequestData('0xFFFFFFFF,sURL,sTitle')
else
if SetLink('Firefox','WWW_GetWindowInfo') then
s := RequestData('0xFFFFFFFF,sURL,sTitle');
end;
if s <> '' then
begin
delete(s,1,1);
URL := copy(s,1,pos('","',s)-1);
delete(s,1,pos('","',s)+2);
Title := copy(s,1,pos('"',s) - 1);
end;
exit;
except
MessageDlg('URL attempt failed!',mtError,[mbOK],0);
end;
end;
但此代码不适用于 Chrome。
谢谢。
【问题讨论】:
-
你从哪里得到的代码?它有内存泄漏——不会释放 DDE 客户端。
-
仅供参考,issue 70184 跟踪 Chrome 缺乏 DDE 支持。
-
这在我看来肯定像
reuse by copy-paste anti pattern。 -
@Ian: 好吧,但是
Self将会存在相当长的一段时间...... -
啊,我明白了,@Ian。不完全是通常意义上的泄漏,但与真正的泄漏也没有明显不同。如果真的是泄漏,那就是操作系统在程序结束时清理了内存。在这种情况下,它是在程序结束前一刻清理内存的主窗体。但无论哪种方式,该对象都远远超过了它的用处,因为它永远不会在这个函数之外被访问。 (它可以被访问,但我们都知道它不会。)
标签: delphi