希望让我的 delphi 应用程序登录网站、导航到页面并自动下载某些文件,解决方案如何防止嵌入式浏览器提示保存下载文件的位置?,对文件下载有很大帮助。
最后一个问题是在弹出窗口中导航打开的最后一步,有很多解决方案可以通过实现 TWebBrowser.NewWindow2 来捕获弹出窗口,但是这些事件似乎都不适用于上面的代码,这与 twebbrowser上面代码中的 .invokeevent 可能有效吗?
如果我使用 invokeveent 和 273(newwindow3) 的 dispID 来调用一个函数,我可以 twebbwowser.navigate() 第二个 webbrowser 到弹出窗口的 url。
我的问题是弹出窗口基本上有一行 javascript "document.print(parent.parent.opener.thefunction())" 第二个 twebbrowser 没有对其父级的引用,所以这失败了。
我可以看到两种可能的解决方案,让 TWebBrowser.NewWindow2 或 3 触发,修复下面的代码示例,LVarArray[0] {const IDispatch},由于某种原因为空。
procedure TWebBrowser.InvokeEvent(ADispID: TDispID; var AParams: TDispParams);
// DispID 250 is the BeforeNavigate2 dispinterface and to the FFileSource here
// is stored the URL parameter (for cases, when the IDownloadManager::Download
// won't redirect the URL and pass empty string to the pszRedir)
//showmessage('test');
var
ArgCount : Integer;
LVarArray : Array of OleVariant;
LIndex : Integer;
begin
inherited;
ArgCount := AParams.cArgs;
SetLength(LVarArray, ArgCount);
for LIndex := Low(LVarArray) to High(LVarArray) do
LVarArray[High(LVarArray)-LIndex] := OleVariant(TDispParams(AParams).rgvarg^[LIndex]);
case ADispID of
250: FFileSource := OleVariant(AParams.rgvarg^[5]);
273: DoNewWindow3(Self,
LVarArray[0] {const IDispatch},
WordBool((TVarData(LVarArray[1]).VPointer)^) {var WordBool},
LVarArray[2] {const OleVariant},
LVarArray[3] {const OleVariant},
LVarArray[4] {const OleVariant});
end;
end;