作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有 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/
我是一名优秀的程序员,十分优秀!