gpt4 book ai didi

delphi - TWebBrowser:如何知道OnNewWindow2事件中的URL?

转载 作者:行者123 更新时间:2023-12-03 15:24:33 27 4
gpt4 key购买 nike

我们有 HTML:

<A target="_blank" href="http://blabla.com">

当点击链接时 OnNewWindow2被解雇:

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
Cancel := True;
// open in default browser
end;

我想在默认浏览器中打开链接: Opening TWebBrowser link in default browser

但是没有BeforeNavigate2在我的案例中被解雇了。
我如何知道 TWebBrowser 中的预期 URL OnNewWindow2事件?

<小时/>

编辑:在较新版本的 Delphi 中,有一个 OnNewWindow3 提供我需要的 URL 的事件。目前,我真的很难开始理解如何将此事件实现到现有的 TWebBrowser 中。 .
如果有人这样做过,那么获得一些帮助就太好了。

最佳答案

您可以覆盖 InvokeEvent 浏览器的方法并在那里等待 DISPID_NEWWINDOW3调度标识符。对于这样的中介层类 OnNewWindow3 事件可以这样实现:

uses
ActiveX, OleCtrls, SHDocVw;

const
DISPID_NEWWINDOW3 = 273;

type
TWebBrowserNewWindow3 = procedure(ASender: TObject; var ppDisp: IDispatch; var Cancel: WordBool;
dwFlags: Longint; const bstrUrlContext: WideString; const bstrUrl: WideString) of object;

TWebBrowser = class(SHDocVw.TWebBrowser)
private
FOnNewWindow3: TWebBrowserNewWindow3;
protected
procedure InvokeEvent(ADispID: TDispID; var AParams: TDispParams); override;
public
property OnNewWindow3: TWebBrowserNewWindow3 read FOnNewWindow3 write FOnNewWindow3;
end;

implementation

procedure TWebBrowser.InvokeEvent(ADispID: TDispID; var AParams: TDispParams);
begin
if (ADispID = DISPID_NEWWINDOW3) and Assigned(FOnNewWindow3) then
begin
FOnNewWindow3(Self, AParams.rgvarg^[4].pdispVal^, AParams.rgvarg^[3].pbool^,
AParams.rgvarg^[2].lVal, WideString(AParams.rgvarg^[1].bstrVal), WideString(AParams.rgvarg^[0].bstrVal));
end
else
inherited;
end;

关于delphi - TWebBrowser:如何知道OnNewWindow2事件中的URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59073357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com