0

德尔福 10.4.2

我是第一次使用 TEdgeBrowser,并且正在我创建的一个小型演示应用程序中玩一些想法。到目前为止,我已经能够以编程方式导航到网站,登录(填写用户名和密码并单击登录按钮),单击一个按钮(我的案例)以转到另一个页面,然后填写一个编辑字段和一个用于查找特定案例的组合框。到目前为止一切都很好。现在该案例可用,我可以选择单击“历史记录”或“服务信息”。我单击“历史记录”按钮并希望在另一个 TEdgeBrowser 组件中打开新窗口。这是我用来尝试执行此操作的代码,但它不起作用。

procedure TfrmMain.EdgeBrowserNewWindowRequested(Sender: TCustomEdgeBrowser;
  Args: TNewWindowRequestedEventArgs);
begin
  //* Natigate to the history page
  pgeMain.ActivePage := tabHistory;

  //* Open link in another WebView2 (new tab):
  Args.ArgsInterface.Set_NewWindow(EdgeBrowserHistory.DefaultInterface);
end;

请注意,我在 FormShow 事件中有以下内容。

procedure TfrmMain.FormShow(Sender: TObject);
begin
  EdgeBrowser.UserDataFolder := 'C:\Temp\';

  EdgeBrowserHistory.CreateWebView;
end;

注意:我的主浏览器是调用 EdgeBrowser

procedure TfrmMain.btnGoClick(Sender: TObject);
begin
  pgeMain.ActivePage := tabBrowser;
  EdgeBrowser.Navigate(edtWebSiteURL.Text);
end;

阅读此站点上的其他帖子,我认为这可能与在 TPageControl 的另一个页面上有一个 TEdgeBrowser 有关,所以我将其移至主窗体,但它仍然无法正常工作。

如果我在 EdgeBrowserNewWindowRequested 事件中没有任何代码,它将打开一个新窗口就好了。有人知道我需要做什么才能让它工作吗?

4

2 回答 2

0

问候格雷格,

感谢你的回复。我确实尝试按照您昨天的建议去做,同时尝试做任何我能想到的事情来完成这项工作,但是,因为我必须登录到这个站点,它不喜欢尝试使用 Navigate() 访问这个页面。

在这里,您可以看到左侧的主 TEdgeBrowser 和右侧的第二个。是的,这一次它至少填充了一些东西(警告消息)。关于让它在另一个 EdgeBrowser 中工作的任何其他想法?

在此处输入图像描述

如果我们不能让它在另一个 EdgeBrowser 中工作,这是首选方式,我可以使用以下代码在当前 EdgeBrowser 中显示页面:

procedure TfrmMain.EdgeBrowserNewWindowRequested(Sender: TCustomEdgeBrowser;
  Args: TNewWindowRequestedEventArgs);
begin
  //* Open link in current WebView2:
  Args.ArgsInterface.Set_NewWindow(Sender.DefaultInterface);
end;

虽然可以在当前 EdgeBrowser 中打开“历史记录”,但现在还有另一个问题,后退按钮被禁用,如果后退按钮被禁用,我无法返回上一页并单击“服务信息”按钮。

如果我使用 MS Edge 访问该网站,查找案例并单击“历史记录”按钮,该网站会在新选项卡中打开页面,如果我返回主选项卡,当然后退按钮在那里被禁用,所以反正我看不到这个问题,除非你知道一个。

所以只剩下一个选项,我真的不太在意,那就是让 EdgeBrower 做自己的事情并在新窗口中打开历史记录。这提出了它自己的一系列问题。

  1. 新窗口的大小可以控制吗?
  2. 可以控制新窗口的位置吗?
  3. 如果我关闭表单,两个新窗口(历史和服务信息)仍然打开。情况不妙。

所以底线,如果这是我唯一的选择,我真的需要能够控制这些窗口。如果可能的话,有什么想法吗?

再次感谢您提供的任何帮助。

于 2021-12-21T13:01:15.220 回答
0

您只需将第二个 TEdgeBrowser 导航到您希望它转到的 URL。(另外,请注意,当您使用 Args 接口获取 PWideChar 时,您需要对 CoTaskMemFree 进行匹配调用)。并且,假设您可能有其他“选项卡”或任何其他可能触发 NewWindowRequest 的按钮/链接,您可能需要一些逻辑来处理这些其他情况,因为下面的代码将转到任何NewWindowRequest 的历史记录选项卡。我不确定您是否还需要设置 EdgeBrowserHistory.UserDataFolder 或者它是否会默认与第一个相同。

尝试这样的事情:

procedure TfrmMain.EdgeBrowserNewWindowRequested(Sender: TCustomEdgeBrowser; Args: TNewWindowRequestedEventArgs);
var
  PUri: PWideChar;
  Url: string;
begin
  //* Navigate to the history page
  pgeMain.ActivePage := tabHistory;

  //* Open link in another WebView2 (new tab):
  Args.ArgsInterface.Get_uri(PUri);
  Url := PUri;
  CoTaskMemFree(PUri);
  EdgeBrowserHistory.Navigate(Url);
  Args.ArgsInterface.Set_Handled(1);
end;
于 2021-12-21T03:04:10.657 回答